我桌子的结构:
id int AUTO_INCREMENT PRIMARY KEY
title text
url text
age int
以下是我尝试将数据保存到此表中的方法:
PreparedStatement ps=con.prepareStatement("insert into table(title, url, age) values ('\"+title+\",\"+url+\",\"+age+\"')");
System.out.println("Connected database successfully..");
ps.executeUpdate();
但是当我运行应用程序时,我得到了
java.sql.SQLException:列数与第1行的值计数不匹配
我想问题可能出在 id 列中,如何解决?
答案 0 :(得分:2)
问题不在于id
列。
从声明中可以看出,所有列都有引号。因此在SQL中似乎只有一列
'"title","url","age"'
您可能想要的是
"insert into table(title, url, age) values ('" + title + "','" + url + "'," + age + ")"
甚至更好,因为它是准备好的语句
"insert into table(title, url, age) values (?, ?, ?)"
答案 1 :(得分:2)
实际上,你有一个不同的问题(你只传递一个“值”) -
PreparedStatement ps=con.prepareStatement("insert into table(title, url, age) "
+ "values (?,?,?)");
ps.setString(1, title);
ps.setString(2, url);
ps.setInt(3, age); // <-- at a guess!
您的原始查询将所有三个值都放在一个字符串'\"+title+\",\"+url+\",\"+age+\"'
中。
答案 2 :(得分:0)
可能的错误
以下代码对我有用 -
try {
Class.forName("com.mysql.jdbc.Driver");
java.sql.Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/ems","root","");
java.sql.Statement s = c.createStatement();
s.executeUpdate("INSERT INTO employee VALUES('','"+fullname+"','"+address+"','"+homephone+"','"+dob+"','"+mobile+"','"+martial+"','"+nic+"','"+title+"','"+department+"','"+basicsalary+"','"+nname+"','"+nrelationship+"','"+nmobile+"')");
JOptionPane.showMessageDialog(rootPane, "Saved!");
} catch (ClassNotFoundException | SQLException ex) {
Logger.getLogger(employeemanagement.class.getName()).log(Level.SEVERE, null, ex);
}