java - 如何从 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) {}
}
解决方案
您的代码有几个问题,主要是 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!");
}
}
推荐阅读
- java - Spring事务管理多线程问题
- javascript - 在 React 中的两个状态之间传输对象
- android - 我怎么知道为什么我的应用程序在某些设备上崩溃了
- javascript - 动态创建的 div 中的 Vanilla Js onclick 分配
- javascript - 从闪亮的反应输出修改 CSS
- c# - 有没有办法在 android xml 中创建自定义可绘制形状?
- python - Scipy 优化最小化总是返回初始猜测(SLSQP)
- c# - 如何使用实体框架检索从存储过程返回的值?
- pandas - 在熊猫行中插入列表?
- php - 迁移后 PHP 文件引发解析错误(例如:T_STRING)