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

时间:2013-12-30 19:18:49

标签: java jdbc sqlexception column-count

我桌子的结构:

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 列中,如何解决?

3 个答案:

答案 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)

可能的错误

  1. 您可能被包括在内 + 额外签名
  2. 检查数据库列顺序和SQL查询顺序
  3. 使用准备好的语句尝试相同的输入
  4. 检查数据库名称、表名称、连接器

以下代码对我有用 -

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);
}