更新表com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException时出错

时间:2013-05-30 16:09:46

标签: jsp jdbc

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

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

首先,您应该使用PreparedStatement,否则您的方法很容易受到SQL Injection攻击。其次,当您向查询发送String时,它们必须由'"括起,具体取决于数据库引擎。第三,必须始终在使用后关闭资源,以免产生内存泄漏。在这种情况下,您应该关闭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");

答案 2 :(得分:-1)

看起来你的语句中的WHERE之前可能需要一个空格......

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

此外,您需要围绕变量使用单引号。