我将值插入数据库但得到“列数与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 | |
+----------+-------------+------+-----+---------+-------+
为什么我收到此错误?我的代码中有什么问题吗? 请帮帮我.......
答案 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。因此,您可以检查列名称中的一些拼写错误。