Java正在更新mysql行(如果id已存在)
我有一个包含5个字段的简单表单。(txtID、txtFirstName、txtLastName、txtCheck、txtSavings)。我只想将这些字段插入我的数据库表“accounts”。在此步骤之前,我想检查我的txtID字段中的ID是否已经存在于我的数据库中。如果是,那么我想用字段中的内容更新数据库行。如果不是,我想创建一个包含内容的新行。到目前为止,检查我的数据库中是否存在ID是可行的,但如果单击我的btn,我会收到以下错误消息:我不知道我做错了什么 com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:您有一个错误 在SQL语法中;检查与您的产品相对应的手册 要使用正确语法的服务器版本(LastName, 名字、支票、储蓄)值('Tester'、'Markus'、'450.00'、'50.00“位于 第1行Java正在更新mysql行(如果id已存在),java,mysql,Java,Mysql,我有一个包含5个字段的简单表单。(txtID、txtFirstName、txtLastName、txtCheck、txtSavings)。我只想将这些字段插入我的数据库表“accounts”。在此步骤之前,我想检查我的txtID字段中的ID是否已经存在于我的数据库中。如果是,那么我想用字段中的内容更新数据库行。如果不是,我想创建一个包含内容的新行。到目前为止,检查我的数据库中是否存在ID是可行的,但如果单击我的btn,我会收到以下错误消息:我不知道我做错了什么 com.mysql.jdbc.ex
你让我对你的代码做些修改吗
private void btnUpdateActionPerformed(java.awt.event.ActionEvent evt) {
try {
String sql = "UPDATE accounts SET LastName = ?, FirstName = ?, Cheque = ?, Savings = ? where id = ?";
pst=conn.prepareStatement(sql);
pst.setString(1,txtLastName.getText());
pst.setString(2,txtFirstName.getText());
pst.setString(3,txtCheque.getText());
pst.setString(4,txtSavings.getText());
pst.setString(5,txtID.getText());
int updatedRowCount = pst.executeUpdate();
// no record with id = txtID
if(updatedRowCount == 0) {
pst.close();
sql = "insert into accounts (ID,LastName,FirstName,Cheque,Savings) values (?,?,?,?,?,?) ";
pst = conn.prepareStatement(sql);
pst.setString(1,txtID.getText());
pst.setString(2,txtLastName.getText());
pst.setString(3,txtFirstName.getText());
pst.setString(4,txtCheque.getText());
pst.setString(5,txtSavings.getText());
pst.executeUpdate();
}
getAllAccounts();
JOptionPane.showMessageDialog(null, updatedRowCount > 0 ? "Customer Updated" : "Customer Inserted");
}
catch(Exception e){
getAllAccounts();
JOptionPane.showMessageDialog(null, e);
}
finally {
try{
pst.close();
}
catch(Exception e) {
}
}
}
您的更新语法不正确,请检查。此外,您正在更新整个表,而不是id=
id
的记录。请尝试String sql=“更新帐户集LastName=?,FirstName=?,check=?,Savings=?其中id=?”?“;
谢谢@guleryuz!它现在可以工作了。当我在另一个项目中使用上述代码时,它仍然可以工作……无论如何感谢你的快速响应:)好吧,这变得很奇怪:(如果我在我的txtID字段中没有ID,我按下按钮,JFrame就会冻结。即使没有任何代码插入If(recordAdded)。如果我在我的txtID字段中添加一个数字,该检查将正常工作并更新数据库条目。此代码通常有问题吗?是:)。如果没有id=id
的记录,则!rs.next()
将是true
和,而将永远循环。这会让你的应用程序冻结。是的,你说得对:)我把它改成了if:)再次感谢@guleryuz
private void btnUpdateActionPerformed(java.awt.event.ActionEvent evt) {
try {
String sql = "UPDATE accounts SET LastName = ?, FirstName = ?, Cheque = ?, Savings = ? where id = ?";
pst=conn.prepareStatement(sql);
pst.setString(1,txtLastName.getText());
pst.setString(2,txtFirstName.getText());
pst.setString(3,txtCheque.getText());
pst.setString(4,txtSavings.getText());
pst.setString(5,txtID.getText());
int updatedRowCount = pst.executeUpdate();
// no record with id = txtID
if(updatedRowCount == 0) {
pst.close();
sql = "insert into accounts (ID,LastName,FirstName,Cheque,Savings) values (?,?,?,?,?,?) ";
pst = conn.prepareStatement(sql);
pst.setString(1,txtID.getText());
pst.setString(2,txtLastName.getText());
pst.setString(3,txtFirstName.getText());
pst.setString(4,txtCheque.getText());
pst.setString(5,txtSavings.getText());
pst.executeUpdate();
}
getAllAccounts();
JOptionPane.showMessageDialog(null, updatedRowCount > 0 ? "Customer Updated" : "Customer Inserted");
}
catch(Exception e){
getAllAccounts();
JOptionPane.showMessageDialog(null, e);
}
finally {
try{
pst.close();
}
catch(Exception e) {
}
}
}