程序中“列计数与第1行的值计数不匹配”错误

时间:2011-12-15 07:28:37

标签: java database jdbc

我将值插入数据库但得到“列数与row1处的值计数值不匹配”错误。

try {
    Class.forName("com.mysql.jdbc.Driver");
    connection = DriverManager.getConnection(connectionURL, "root", "root");
    String sql = "insert into login(username,password) values(?,?)";
    PreparedStatement pst = connection.prepareStatement(sql);
    pst.setString(1, username);
    pst.setString(2, password);

    int numRowsChanged = pst.executeUpdate();
    out.println(" Data has been submitted ");

    pst.close();
} catch (ClassNotFoundException e) {
    out.println("Couldn't load database driver: " + e.getMessage());
} catch (SQLException e) {
    out.println("SQLException caught: " + e.getMessage());
} catch (Exception e) {
    out.println(e);
} finally {
    try {
        if (connection != null)
            connection.close();
    } catch (SQLException ignored) {
        out.println(ignored);
    }
}

我在MySql数据库中的表:

           +----------+-------------+------+-----+---------+-------+
           | Field    | Type        | Null | Key | Default | Extra |
           +----------+-------------+------+-----+---------+-------+
           | username | varchar(20) | YES  |     | NULL    |       |
           | password | varchar(15) | YES  |     | NULL    |       |
           +----------+-------------+------+-----+---------+-------+

为什么我收到此错误?我的代码中有什么问题吗? 请帮帮我.......

4 个答案:

答案 0 :(得分:0)

可能在sql String中列的名称不正确。

答案 1 :(得分:0)

错误本身可能是错误的,因为一切看起来都很好。可能没有定义表 login 的主键(用户名)?我看到用户名可以为空。

答案 2 :(得分:0)

另一种方法,一种未经准备的陈述可能会给出一个想法。

String sql = "insert into login(username, password) values('"
        + username + "', '" + password + "')";
System.out.println("sql = " + sql);
Statement pst = connection.createStatement();
pst.execute(sql);

如果没有任何帮助,请创建一个新表xxx并尝试全部。

答案 3 :(得分:0)

实际上,当提供的值数和列数不匹配时会导致此错误。 (即) 插入表(col1,col2)值(val1) 和 插入表(col1)值(val1,val2) 两者都会产生同样的错误。

我尝试了你的代码,它完全适用于Oracle。因此,您可以检查列名称中的一些拼写错误。