我在尝试将记录添加到MySQL数据库时遇到问题。 我的数据库有5列(id,名称,玩家,点,位置),我已将id声明为“Auto-Increment”和“primary”。然后,当我尝试添加记录时,我收到错误 列数与第1行的值计数不匹配 。当我的代码有这个语句时,会发生这种情况,而不是向用户询问输入,因为id应该从数据库中自动增加自身。
String sql1 = "INSERT INTO teams VALUES (?,?,?,?)";
我被告知我不应该添加另一个?到VALUES()因为我不需要再次自动递增它。
这是我的代码:
try
{
conn_pr1 = DriverManager.getConnection("jdbc:mysql://localhost/test1?user=me&password=12345");
conn1 = DriverManager.getConnection("jdbc:mysql://localhost/test1?user=me&password=12345");
stmt1 = conn1.createStatement();
rs1 = stmt1.executeQuery("SELECT * FROM teams");
String sql1 = "INSERT INTO teams VALUES (?,?,?,?)";
ps1 =conn_pr1.prepareStatement(sql1);
String str1 = JOptionPane.showInputDialog(null,"Team name : ");
String str2 = JOptionPane.showInputDialog(null,"Players : ");
String str3 = JOptionPane.showInputDialog(null,"Points : ");
String str4 = JOptionPane.showInputDialog(null,"Position : ");
int int2 = Integer.parseInt(str2);
int int3 = Integer.parseInt(str3);
int int4 = Integer.parseInt(str4);
ps1.setString(1,str1);
ps1.setLong(2,int2);
ps1.setLong(3,int3);
ps1.setLong(4,int4);
ps1.executeUpdate();
System.out.println("\n Successfully added " + str1 + " to database test1!");
System.out.println("\n After Changes : ");
System.out.println("___________________________________________________________________________________");
while (rs1.next())
{
System.out.println(" Id : " + rs1.getString(1) + " | Team : " + rs1.getString(2) + " | Players : " + rs1.getString(3) + " | Points : " + rs1.getString(4) + " | Position : " + rs1.getString(5));
}
conn1.close();
conn_pr1.close();
stmt1.close();
ps1.close();
rs1.close();
} catch ( SQLException se)
{
se.printStackTrace();
}
}
});
答案 0 :(得分:1)
INSERT INTO teams (names,players,points,position) VALUES (?,?,?,?)
应该可以解决问题。
答案 1 :(得分:0)
您应该明确指定要插入的列,目前您拥有的参数占位符少于表中的列数。您需要明确表示您不希望插入ID列,以便由自动增量处理它。使用:
INSERT INTO myTable (column1, column2, ...) VALUES (?, ?, ...)