首页 > 解决方案 > 如何从 Java 检索数据到 sqlite 以检查数据是否已经存在并更新数据是否匹配

问题描述

例如,我创建了一个程序来更改用户密码,但是当我单击“更改”时,什么也没发生,也没有收到任何错误。你觉得我从这里错过了什么?提前致谢

private void changeActionPerformed(java.awt.event.ActionEvent evt) {
String user, pass, newp;
user = username.getText();
pass = password.getText();
newp = newpass.getText();
String sql = "select * from Login where username='" + user + "'";
String sql1 = "update Login set password= '" + newp + "' where username='" + user + "'";
try {
    //Connection.rs=Connection.pst.executeQuery(sql);
    pst = conn.prepareStatement(sql);
    pst.executeQuery(sql);
    if (rs.next()) {
        if (rs.getString("password").equals(pass)) {
            // newp.setText("");
            pst.executeUpdate(sql1);
            JOptionPane.showMessageDialog(null, "Password Changed!");
        } else {
            JOptionPane.showMessageDialog(null, "Invalid username or password", "Access Denied", JOptionPane.ERROR_MESSAGE);

        }
    } else {
        JOptionPane.showMessageDialog(null, "Wrong username!");
    }
} catch (Exception e) {}

}

标签: javadatabasesqlite

解决方案


您的代码有几个问题,主要是 try/catch 块会抑制任何错误消息,因此您无法理解自己做错了什么。

您不能使用同一个PreparedStatement对象执行 2 个不同的 sql 语句,但这就是您所做的。
因此,为语句定义一个,为SELECT语句定义另一个UPDATE
此外,?对传递给 sql 语句的参数使用占位符,而不是连接它们并通过setString()方法传递它们。
这是使用准备好的语句的正确且安全的方法。

尝试这个:

private void changeActionPerformed(java.awt.event.ActionEvent evt) {
    String user = username.getText();
    String pass = password.getText();
    String newp = newpass.getText();

    String sqlSelect = "select * from Login where username = ?";
    PreparedStatement pstSelect = conn.prepareStatement(sqlSelect);
    pstSelect.setString(1, user);
    ResultSet rs = pstSelect.executeQuery();

    if (rs.next()) {
        if (rs.getString("password").equals(pass)) {
            String sqlUpdate = "update Login set password = ? where username = ?";
            PreparedStatement pstUpdate = conn.prepareStatement(sqlUpdate); 
            pstUpdate.setString(1, newp);
            pstUpdate.setString(2, user);
            pstUpdate.executeUpdate();
            JOptionPane.showMessageDialog(null, "Password Changed!");
        } else {
            JOptionPane.showMessageDialog(null, "Invalid username or password", "Access Denied", JOptionPane.ERROR_MESSAGE);
        }
    } else {
        JOptionPane.showMessageDialog(null, "Wrong username!");
    }
}

推荐阅读