Java 未知列';CA1001';在';其中第'条;

Java 未知列';CA1001';在';其中第'条;,java,Java,我正在尝试修复此问题一段时间,但无法找到或修复代码。在方法中添加自动生成的“id”时触发的错误 private void btnUpdateActionPerformed(java.awt.event.ActionEvent evt) { try { Class.forName("com.mysql.jdbc.Driver"); Connection

我正在尝试修复此问题一段时间,但无法找到或修复代码。在方法中添加自动生成的“id”时触发的错误

private void btnUpdateActionPerformed(java.awt.event.ActionEvent evt) {                                          
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/inventory?useTimezone=true&serverTimezone=UTC", "root", "ichigo197328");
            int row = jTable1.getSelectedRow();
            String value = (jTable1.getModel().getValueAt(row, 0).toString());
            String sql = "UPDATE category SET category_name = ? WHERE category_id = "+ value;

            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, CategoryNameField.getText());

            pstmt.executeUpdate();
            DefaultTableModel model = (DefaultTableModel)jTable1.getModel();
            model.setRowCount(0);           
            JOptionPane.showMessageDialog(null, "Record Updated Successfully ");
            DisplayTable();
            conn.close();
        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }

    } 

您正确地使用了准备好的语句,但应该在
WHERE
子句中使用位置参数,而不是串联:

String sql = "UPDATE category SET category_name = ? WHERE category_id = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, CategoryNameField.getText());
pstmt.setString(2, value);
pstmt.executeUpdate();
错误的确切原因与您的
WHERE
子句有关,该子句将
category\u id
字符串列与未转换的字符串文字进行比较,例如

WHERE category_id = some_value      -- should be 'some_value'
SQL将
某些值解释为引用列、表等名称。通过使用预先准备好的语句(您一直都在这样做),您可以让数据库处理正确的值转义