java.sql.SQLException:列计数与第1行jdbc处的值计数不匹配

时间:2015-01-31 18:25:53

标签: mysql jdbc

Connection conn = null;

PreparedStatement pst = null;
try {
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/chatdata",      "admin", "int*M=9167757203");
    pst = conn.prepareStatement("insert into user values (?, ?)"); 
} catch (Exception e) {

        } 
String password;
String userName;
try {
    BufferedReader kin = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Enter Username :: ");
    userName = kin.readLine();
    System.out.println("Enter Password :: ");
    password = kin.readLine();
    pst.setString(1, userName);
    pst.setString(2, password);
    pst.execute();
} catch (Exception e) {
    System.out.println(e);
}

此代码显示错误:

  

“java.sql.SQLException:列数与行的值计数不匹配   1"

虽然我的表有三个列条目uid是AUTO_INCREMENT,用户名和密码是我必须通过的两个字符串,所以如果有人能找到答案请帮助。

2 个答案:

答案 0 :(得分:2)

这是MySQL手册中关于使用没有列列表的insert的说法:

  

如果没有为INSERT ... VALUES或指定列名列表   INSERT ... SELECT,表中每列的值必须是   由VALUES列表或SELECT语句提供。

因此,即使uid具有autoincrement标志,您仍需要在insert语句中指定您呈现值的列。作为解决方案,您只需修改insert语句:

insert into user (username, password) values (?, ?)

(我认为usernamepassword是列的名称。)

您可以阅读有关使用自动增量here

的更多信息

答案 1 :(得分:0)

如果你输入这个语法,netbeans会以不同的方式在mysql cmd中评估该字段 插入用户('用户名','密码')值('xyz','abc'); 它会工作得很好但是在netbeans中,表和字段名称不是用单引号表示,而是用``这种类型的引号,所以这在netbeans中完全没问题 插入userusernamepassword)值('xyz','abc'); 其中xyz和abc之类的字符串用单引号表示......