Java正在更新mysql行(如果id已存在)

Java正在更新mysql行(如果id已存在),java,mysql,Java,Mysql,我有一个包含5个字段的简单表单。(txtID、txtFirstName、txtLastName、txtCheck、txtSavings)。我只想将这些字段插入我的数据库表“accounts”。在此步骤之前,我想检查我的txtID字段中的ID是否已经存在于我的数据库中。如果是,那么我想用字段中的内容更新数据库行。如果不是,我想创建一个包含内容的新行。到目前为止,检查我的数据库中是否存在ID是可行的,但如果单击我的btn,我会收到以下错误消息:我不知道我做错了什么 com.mysql.jdbc.ex

我有一个包含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行


你让我对你的代码做些修改吗

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