【发布时间】:2018-10-14 11:33:42
【问题描述】:
String query = "INSERT INTOusers(int,fname,lname,age,sname,bname) VALUES ('"+jTextField_FirstName.getText()+"','"+jTextField_LastName.getText()+"',"+jTextField_Age.getText()+",'"+jTextField_SName.getText()+"','"+jTextField_BName.getText()+"')";
这是堆栈跟踪:
java.sql.SQLException: Column count doesn't match value count at row 1 at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965) at
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976) at
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912) at
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530) at
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683) at
com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2482) at
com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1552)
【问题讨论】:
-
java.sql.SQLException:列计数与 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965) 的第 1 行的值计数不匹配,位于 com.mysql.jdbc.MysqlIO .checkErrorPacket(MysqlIO.java:3976) 在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912) 在 com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530) 在 com.mysql.jdbc。 MysqlIO.sqlQueryDirect(MysqlIO.java:2683) 在 com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2482) 在 com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1552)
-
这真的不应该被放在首位。没有解释你的目标并且没有格式化的代码转储质量很差。
-
如果第一列
int属于auto_increment,则不需要包含在insert语句中。将其从语句中的列名列表中删除,然后执行。 -
除了指定 6 列和只有 5 个值之外,您的代码非常不安全,因为它容易受到 SQL 注入的影响。您真的不应该将值连接到查询字符串中。使用带参数的预处理语句。