【问题标题】:Column count doesn't match value count at row 1 java [duplicate]列数与第 1 行的值计数不匹配 java [重复]
【发布时间】: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 注入的影响。您真的不应该将值连接到查询字符串中。使用带参数的预处理语句。

标签: java mysql jdbc


【解决方案1】:

你要设置6列int, fname, lname, age, sname, bname

但您只提供 5 个列值。

多加一列值,就OK了

【讨论】:

    【解决方案2】:
       String query = "INSERT INTO users(int, fname, lname, age, sname, bname) VALUES   
     ('"+jTextField_FirstName.getText()+"','"+jTextField_LastName.getText()+"',"
            +jTextField_Age.getText()+",'"+jTextField_SName.getText()+"','"
       +jTextField_BName.getText()+"')";
    

    根据查询,您正在为 fname、lname、age、sname、bname 插入值, 不是 int 你的查询应该像下面那样为 int 设置第一个值

    String query = "INSERT INTO users(int, fname, lname, age, sname, bname) VALUES   
    
    
    ('"+value_for_int+"','"+jTextField_FirstName.getText()+"','"+jTextField_LastName.getText()+"',"
            +jTextField_Age.getText()+",'"+jTextField_SName.getText()+"','"
       +jTextField_BName.getText()+"')";
    

    【讨论】:

      【解决方案3】:

      您提供六个如下的colomun,

      INSERT INTOusers(int,fname,lname,age,sname,bname) 
      

      但只提供了五个值如下,

      jTextField_FirstName.getText()
      
      jTextField_LastName.getText()
      
      jTextField_Age.getText()
      
      jTextField_SName.getText()
      
      jTextField_BName.getText()
      

      所以为 insert query 中指定的 int 提供 一个 值,然后就不会出现错误了!!

      【讨论】:

        猜你喜欢
        • 2012-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多