java - 使用 Select 的 MySQL 和 JDBC PreparedStatement

标签 java mysql jakarta-ee servlets jdbc

<分区>

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

Exception Caughtcom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? and pass =?' at line 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;
                    }
              }

最佳答案

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

改变

ResultSet rs = stmt.executeQuery(sql)

ResultSet rs = stmt.executeQuery();

关于java - 使用 Select 的 MySQL 和 JDBC PreparedStatement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33391506/

相关文章:

java - 如何为任何泛型 f 创建数学函数 f(x)?

java - 在自定义工具箱的 Matlab Simulink block 内存储自定义 java 对象

php - 如何在函数中存储 PHP 变量以供在另一个页面上使用

WHERE in 子句的 Mysql 问题

database - Java EE/JPA : Applying key-value table techniques

java - 反射比正常慢得多

java - 日志记录不显示

mysql - 计算时间范围内分组的行数

java - 每次调用后都有不同的Web服务对象

java - Jersey:如何在多个 Web 模块之间共享 ExceptionMapper?