Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Select的MySQL和JDBC PreparedStatement_Java_Mysql_Jakarta Ee_Servlets_Jdbc - Fatal编程技术网

Java 使用Select的MySQL和JDBC PreparedStatement

Java 使用Select的MySQL和JDBC PreparedStatement,java,mysql,jakarta-ee,servlets,jdbc,Java,Mysql,Jakarta Ee,Servlets,Jdbc,当我尝试运行程序时,出现了此异常 例外情况 Caughtcom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您 SQL语法有错误;检查相应的手册 您的MySQL服务器版本是否使用了正确的语法?并通过 第1行的=?' 当我硬编码值时,我得到了正确的结果。例如:selectname,passfromservlettutorial.logintable,其中name='Bill'和pass='Gates'运行良好 上面程序中的SQL语法可

当我尝试运行程序时,出现了此异常

例外情况 Caughtcom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您 SQL语法有错误;检查相应的手册 您的MySQL服务器版本是否使用了正确的语法?并通过 第1行的=?'

当我硬编码值时,我得到了正确的结果。例如:
selectname,passfromservlettutorial.logintable,其中name='Bill'和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;
                    }
              }

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

改变

ResultSet rs = stmt.executeQuery(sql)


非常感谢。它解决了问题:)@Cafe不客气
ResultSet rs = stmt.executeQuery();