【问题标题】:MySQL and JDBC PreparedStatement using Select [duplicate]MySQL 和 JDBC PreparedStatement 使用 Select [重复]
【发布时间】:2016-01-28 06:04:48
【问题描述】:

当我尝试运行程序时遇到此异常

例外 Caughtcom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 你 您的 SQL 语法有错误;检查对应的手册 您的 MySQL 服务器版本,以便在 '? 附近使用正确的语法?并通过 =?在第 1 行

当我对值进行硬编码时,我会得到正确的结果。例如:SELECT name, pass from servlettutorial.logintable where name = 'Bill' and pass = 'Gates' 运行良好。

上面程序中的 SQL 语法有什么问题?

try{
              Class.forName("com.mysql.jdbc.Driver");
              Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/servlettutorial?"
                      + "user=root&password=carinov");

              String sql = "SELECT name, pass from servlettutorial.logintable where name = ? and pass = ?";
              PreparedStatement stmt = conn.prepareStatement(sql);

              stmt.setString(1, serv_name); 
              stmt.setString(2,serv_pass);

              ResultSet rs = stmt.executeQuery(sql);

              while (rs.next()) {

                    String d_name = rs.getString("name");
                    String d_pass = rs.getString("pass");

                    if(d_name.equals(serv_name) && (d_pass.equals(serv_pass)))
                    {
                            found_match=1;
                            break;
                    }
              }

【问题讨论】:

    标签: java mysql jakarta-ee servlets jdbc


    【解决方案1】:

    您不应将 SQL 查询传递给 executeQuery(),因为 PreparedStatement 已经包含查询和参数。

    改变

    ResultSet rs = stmt.executeQuery(sql)
    

    ResultSet rs = stmt.executeQuery();
    

    【讨论】:

    • 非常感谢。它解决了问题:)
    • @Cafe 不客气
    猜你喜欢
    • 2013-01-12
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 2021-07-28
    • 2021-12-11
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多