我有以下代码:
try {
userPasswordNew = new String(ChangePW.passwordFieldconfirm.getPassword());
PreparedStatement prepStmt = connection.prepareStatement(
"UPDATE " + TABLE_NAME + " SET password = " + userPasswordNew + " WHERE username = " + username);
prepStmt.setString(2, BCrypt.hashpw(userPasswordNew, BCrypt.gensalt(bcryptRounds))); //2 represents number of column in database starting with 0
System.out.println(prepStmt);
return prepStmt.executeUpdate() != 0;
} catch (SQLException e) {
e.printStackTrace();
}
我尝试将1 2和3作为索引,但是每次它抛出Index out of range异常。还有另一种获取列的方法,也许加上它的名字吗?还是我做错了什么? 有人可以帮忙吗?
答案 0 :(得分:0)
要使用准备好的语句-请使用?
代替提供的值。像此示例中一样:
String updateString =
"update " + dbName + ".COFFEES " +
"set SALES = ? where COF_NAME = ?";
updateSales = con.prepareStatement(updateString);
要获取更多信息,请查看here。在您的情况下,可能是:
PreparedStatement prepStmt = connection.prepareStatement(
"UPDATE " + TABLE_NAME + " SET password = ? WHERE username = ?");
prepStmt.setString(1, "that new password");
prepStmt.setString(2, "user_name");
答案 1 :(得分:0)
我假设password
和username
是文本值。因此,您必须将这些值用引号引起来。
那将是查询
"UPDATE " + TABLE_NAME + " SET password = " + userPasswordNew + " WHERE username = " + username
此外,在使用PreparedStatement时,一定不要在查询中提及变量。更整洁的方法是改用?
。像这样的东西。
"UPDATE " + TABLE_NAME + " SET password = ? WHERE username = ?
然后对userPasswordNew
和username
使用.setString()等方法。
请选中https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
答案 2 :(得分:0)
使用PreparedStatement
时,通过放置1个或多个?
来定义要在sql语句中传递的参数。
然后,您可以使用setString()
,setInt()
,...之类的方法将值传递给这些参数。
参数的顺序不是基于0而是基于1。
try {
userPasswordNew = new String(ChangePW.passwordFieldconfirm.getPassword());
PreparedStatement prepStmt =
connection.prepareStatement("UPDATE " + TABLE_NAME +" SET password = ? WHERE username = ?");
prepStmt.setString(1, userPasswordNew);
prepStmt.setString(2, username);
System.out.println(prepStmt);
return prepStmt.executeUpdate() != 0;
} catch (SQLException e) {
e.printStackTrace();
}
您的代码中有以下行:
prepStmt.setString(2, BCrypt.hashpw(userPasswordNew, BCrypt.gensalt(bcryptRounds)));
我不知道这是否是您要传递的参数。
如果是,我在sql语句中看不到?
占位符。