if(hidPass.equals(pass)){
String encodedPass = Base64.encode(newPass.getBytes(), Base64.BASE64DEFAULTLENGTH);
try{
String connectionURL = "jdbc:mysql://localhost:3306/books";// books is the database
Connection connection=null;
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(connectionURL, "root", "bonnysingh");
Statement st = connection.createStatement();
st.executeUpdate("UPDATE signup SET password="+encodedPass+"WHERE Username="+CurrentUser);
System.out.println("Update Complete");
}
catch(Exception e){
System.out.println(e);
response.sendRedirect("view.jsp");
}
}
else{
System.out.println("Update InComplete");
}
我收到此错误
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“WHERE Username = Damanpreet”附近使用正确的语法
任何人都可以帮助我吗?
答案 0 :(得分:0)
用户名是一个字符串。 Mysql期望或引用字符串where Username="bob"
或类似运算符where Username like "bob"
答案 1 :(得分:0)
首先,您应该使用PreparedStatement
,否则您的方法很容易受到SQL Injection攻击。其次,当您向查询发送String
时,它们必须由'
或"
括起,具体取决于数据库引擎。第三,必须始终在使用后关闭资源,以免产生内存泄漏。在这种情况下,您应该关闭PreparedStatement
和Connection
。
根据这些建议调整代码后,应该是这样的:
Connection connection=null;
PreparedStatement pstmt = null;
try {
String connectionURL = "jdbc:mysql://localhost:3306/books";// books is the database
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(connectionURL, "root", "bonnysingh");
String updateSql = "UPDATE signup SET password = ? WHERE Username = ?";
pstmt = connection.prepateStatement(updateSql);
pstmt.setString(1, encodedPass);
pstmt.setString(2, CurrentUser);
pstmt.executeUpdate();
System.out.println("Update Complete");
} catch(Exception e) {
//System.out.println(e);
//handle the exception!
e.printStackTrace();
} finally {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStacktrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStacktrace();
}
}
}
response.sendRedirect("view.jsp");
答案 2 :(得分:-1)
看起来你的语句中的WHERE之前可能需要一个空格......
st.executeUpdate("UPDATE signup SET password="+encodedPass+" WHERE Username="+CurrentUser);
此外,您需要围绕变量使用单引号。