0
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”附近使用正确的语法

谁能帮我吗?

4

3 回答 3

0

用户名是一个字符串。Mysql 期望或带引号的字符串where Username="bob"是like 运算符where Username like "bob"

于 2013-05-30T16:15:27.987 回答
0

首先,您应该使用 a PreparedStatement,否则您的方法容易受到SQL 注入攻击。其次,当您向String查询发送 s 时,它们必须包含在数据库引擎中'"取决于数据库引擎。第三,您必须始终在使用后关闭资源,以免产生内存泄漏。在这种情况下,您应该关闭PreparedStatementConnection

根据这些建议调整您的代码后,它应该是这样的:

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");
于 2013-05-30T16:42:00.203 回答
-1

看起来你在声明中的 WHERE 之前可能需要一个空格......

st.executeUpdate("UPDATE signup SET password="+encodedPass+" WHERE Username="+CurrentUser);

此外,您需要在变量周围加上单引号。

于 2013-05-30T16:16:42.833 回答