【问题标题】:java.sql.SQLException: Column count doesn't match value count at row 1java.sql.SQLException:列计数与第 1 行的值计数不匹配
【发布时间】:2014-01-17 17:14:51
【问题描述】:

我的表结构:

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

【问题讨论】:

  • 您是否尝试打印出您准备好的语句字符串并确保其格式正确?另外,应该使用参数。
  • 呃。我经常看到这种情况,令人难以置信。您使用的是什么 DBMS?它不能是 SQLServer 和 mySQL。这是一个或另一个。

标签: java jdbc sqlexception column-count


【解决方案1】:

问题不在于id 列。

从语句看来,您在 all 列周围都有引号。因此,在 SQL 看来,您只有一列

'"title","url","age"'

你可能想要的是

"insert into table(title, url, age) values ('" + title + "','" + url + "'," + age + ")"

甚至更好,因为它是一个准备好的语句

"insert into table(title, url, age) values (?, ?, ?)"

【讨论】:

    【解决方案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+\"'

    【讨论】:

      【解决方案3】:

      可能的错误

      1. 您可能会被包括在内 + 额外签名
      2. 检查DB列顺序和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);
      }
      

      【讨论】:

        猜你喜欢
        • 2020-02-06
        • 1970-01-01
        • 2023-03-31
        • 2020-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-17
        相关资源
        最近更新 更多