Java MySQLSyntaxErrorException神秘

Java MySQLSyntaxErrorException神秘,java,mysql,sql,prepared-statement,Java,Mysql,Sql,Prepared Statement,我试图更新我的jtable(更改值并按enter键),结果出现了错误。由于大小原因,错误未满。我认为它的其余部分只是c3p0连接池工具产生的无关信息 假设起初,我认为这可能是c3p0的问题,因为为了将其用于准备好的语句,我必须编辑配置文件/更改设置。但我使用了传统的从DriverManager获取连接的方法,发现它与此无关 另一个假设是一些数据类型问题。因为我键入了3.00,错误显示为“Flat”='3.0',其中第1行的ID='4' ImportData方法中的文本测试行未执行。所以这意味着它

我试图更新我的jtable(更改值并按enter键),结果出现了错误。由于大小原因,错误未满。我认为它的其余部分只是c3p0连接池工具产生的无关信息

假设起初,我认为这可能是c3p0的问题,因为为了将其用于准备好的语句,我必须编辑配置文件/更改设置。但我使用了传统的从DriverManager获取连接的方法,发现它与此无关

另一个假设是一些数据类型问题。因为我键入了3.00,错误显示为
“Flat”='3.0',其中第1行的ID='4'
ImportData方法中的文本测试行未执行。所以这意味着它在执行SQL语句时崩溃。在我的数据库表中,除ID和date之外的列都是float(9,2)类型,表示总位数=9;点后的数字=2。我确实有DecimalFormatTrenderer类,它可能与此有关

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Flat' = '3.0' where ID = '4'' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:377)
at com.mysql.jdbc.Util.getInstance(Util.java:360)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:978)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3887)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3823)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2530)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1907)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2141)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2077)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2062)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
at components.TableWithBottomLine$ImportData.<init>(TableWithBottomLine.java:174)
at components.TableWithBottomLine.tableChanged(TableWithBottomLine.java:147)
at javax.swing.table.AbstractTableModel.fireTableChanged(Unknown Source)
at javax.swing.table.AbstractTableModel.fireTableCellUpdated(Unknown Source)
at components.TableWithBottomLine$MyTableModel.setValueAt(TableWithBottomLine.java:251)
at javax.swing.JTable.setValueAt(Unknown Source)
at javax.swing.JTable.editingStopped(Unknown Source)
at javax.swing.AbstractCellEditor.fireEditingStopped(Unknown Source)
at javax.swing.DefaultCellEditor$EditorDelegate.stopCellEditing(Unknown Source)
at javax.swing.DefaultCellEditor.stopCellEditing(Unknown Source)
at javax.swing.JTable$GenericEditor.stopCellEditing(Unknown Source)
at javax.swing.DefaultCellEditor$EditorDelegate.actionPerformed(Unknown Source)
at javax.swing.JTextField.fireActionPerformed(Unknown Source)
at javax.swing.JTextField.postActionEvent(Unknown Source)
at javax.swing.JTextField$NotifyAction.actionPerformed(Unknown Source)
at javax.swing.SwingUtilities.notifyAction(Unknown Source)
at javax.swing.JComponent.processKeyBinding(Unknown Source)
at javax.swing.JComponent.processKeyBindings(Unknown Source)
at javax.swing.JComponent.processKeyEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$400(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
罗尔德尼伊斯 回答了这个问题。 老实说,我发现你的代码有3个问题。首先也是最重要的一点:我认为在准备好的语句
“set?=?”
中不能这样做,我认为列名不能用占位符替换。尝试使用
“set Flat=?”
,看看它是否有效。如果是这样,你就知道是什么导致了这些问题。 另外两个是您正在将参数设置为字符串,而它们不是字符串,但可能是一个double和一个int

prepsmt.setString(1,colName);
预测试设置字符串(2,单元格值);
预测试设置字符串(3,单元格Id)

//对于测试,列名不是动态的
prepsmt.setDouble(1,cellValue);
预测试设置(2,单元Id)

看看这是否有效。当然,您应该确保您的变量具有适当的类型。注:不建议在变量名中使用下划线,根据命名约定,应按大小写。工作代码如下:

public class ImportData {    

    public ImportData(String a, Object b, Object c)
            throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement prepStmt = null;          
        try {
            connection = ConnectionManager.getConnection();
            String colName = a;             
           // String cellValue = b.toString();
           // String cellId = c.toString();
            float cellValue = (float) b;
            int cellId = (int) c;               
            String updateString = "update finance.fin " + "set " + colName + "= ? " + "where ID = ? "+ ";";
            prepStmt = connection.prepareStatement(updateString);
            prepStmt.setFloat(1, cellValue);
            prepStmt.setInt(2, cellId);             
            prepStmt.executeUpdate();  

        } catch (SQLException e) {
            e.printStackTrace();
        } 
        finally {
            closeAll(null, null, prepStmt, connection);
        }  
    }   
}
public class ImportData {    

    public ImportData(String a, Object b, Object c)
            throws ClassNotFoundException, SQLException {
        Connection connection = null;
        PreparedStatement prepStmt = null;          
        try {
            connection = ConnectionManager.getConnection();
            String colName = a;             
           // String cellValue = b.toString();
           // String cellId = c.toString();
            float cellValue = (float) b;
            int cellId = (int) c;               
            String updateString = "update finance.fin " + "set " + colName + "= ? " + "where ID = ? "+ ";";
            prepStmt = connection.prepareStatement(updateString);
            prepStmt.setFloat(1, cellValue);
            prepStmt.setInt(2, cellId);             
            prepStmt.executeUpdate();  

        } catch (SQLException e) {
            e.printStackTrace();
        } 
        finally {
            closeAll(null, null, prepStmt, connection);
        }  
    }   
}