2

私のテーブルの構造:

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列にあると思いますが、どうすれば解決できますか?

4

3 に答える 3

3

実際には、別の問題があります (1 つの「値」しか渡していません) -

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!

元のクエリは、3 つの値すべてを 1 つの string に入れます'\"+title+\",\"+url+\",\"+age+\"'

于 2013-12-30T19:25:40.933 に答える
3

問題はid列ではありません。

ステートメントから、すべての列を引用符で囲んでいるように見えます。したがって、SQLには、列が1つしかないようです

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

あなたが持ちたいと思うかもしれないものは

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

またはさらに良いことに、それは準備されたステートメントであるためです

"insert into table(title, url, age) values (?, ?, ?)"
于 2013-12-30T19:23:48.190 に答える
0

起こりうる間違い

  1. あなたが含まれる可能性があります + 余分に署名
  2. DB列の順序とSQLクエリの順序を確認してください
  3. 準備済みステートメントで同じ入力を試す
  4. DB名、テーブル名、コネクタを確認

次のコードは私のために働いた -

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);
}
于 2021-04-03T03:53:01.993 に答える