将参数传递给 JDBC 预语句

2022-09-01 12:34:27

我正在尝试为我的程序制作我的验证类。我已经建立了与MySQL数据库的连接,并且已经将行插入到表中。该表由 和 字段组成。现在我想通过构造函数的参数选择数据库上的特定行。firstNamelastNameuserID

import java.sql.*;
import java.sql.PreparedStatement;
import java.sql.Connection;

public class Validation {

    private PreparedStatement statement;
    private Connection con;
    private String x, y;

    public Validation(String userID) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/test", "root", "");
            statement = con.prepareStatement(
                    "SELECT * from employee WHERE  userID = " + "''" + userID);
            ResultSet rs = statement.executeQuery();
            while (rs.next()) {
                x = rs.getString(1);
                System.out.print(x);
                System.out.print(" ");
                y = rs.getString(2);
                System.out.println(y);
            }
        } catch (Exception ex) {
            System.out.println(ex);
        }
    }
}
    

但这似乎不起作用。


答案 1

您应该使用 setString() 方法来设置 .这既可以确保语句的格式正确,又可以防止:userIDSQL injection

statement =con.prepareStatement("SELECT * from employee WHERE  userID = ?");
statement.setString(1, userID);

在Java教程中有一个很好的教程,关于如何正确使用sPreparedStatement


答案 2

如果您使用的是预准备语句,则应按如下方式使用它:

"SELECT * from employee WHERE userID = ?"

然后使用:

statement.setString(1, userID);

?将在查询中替换为传递到方法中的用户 ID。setString

请在此处查看如何使用 PreparedStatement


推荐