JDBC 준비 상태에 매개 변수 전달
저는 제 프로그램을 위한 검증 수업을 하려고 합니다.MySQL 데이터베이스에 대한 연결을 이미 설정했고 테이블에 행을 이미 삽입했습니다.테이블은 다음과 같이 구성됩니다.firstName
,lastName
그리고.userID
들녘이제 내 생성자의 매개변수를 통해 데이터베이스의 특정 행을 선택하고자 합니다.
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);
}
}
}
하지만 효과가 없는 것 같습니다.
메소드를 사용하여 다음을 설정해야 합니다.userID
. 이렇게 하면 문의 형식이 올바르게 지정되고 SQL 주입을 방지할 수 있습니다.
statement =con.prepareStatement("SELECT * from employee WHERE userID = ?");
statement.setString(1, userID);
사용법에 대한 좋은 튜토리얼이 있습니다.PreparedStatement
자바 자습서에서 s를 올바르게 표시됩니다.
준비된 문을 사용하는 경우 다음과 같이 사용해야 합니다.
"SELECT * from employee WHERE userID = ?"
그러면 다음을 사용합니다.
statement.setString(1, userID);
?
쿼리에서 사용자 ID가 전달된 사용자 ID로 대체됩니다.setString
방법.
여기에서 Prepared Statement를 사용하는 방법을 살펴보십시오.
쿼리에 문제가 있습니다.
statement =con.prepareStatement("SELECT * from employee WHERE userID = "+"''"+userID);
ResultSet rs = statement.executeQuery();
문장 준비를 사용하고 있습니다.따라서 다음을 사용하여 파라미터를 설정해야 합니다.statement.setInt()
아니면statement.setString()
당신의 유형이 무엇인지에 따라.userId
다음으로 바꿉니다: -
statement =con.prepareStatement("SELECT * from employee WHERE userID = :userId");
statement.setString(userId, userID);
ResultSet rs = statement.executeQuery();
또는 사용할 수 있습니다.?
지정된 가치 대신 -:userId
..
statement =con.prepareStatement("SELECT * from employee WHERE userID = ?");
statement.setString(1, userID);
SQL 주입 공격을 방지하는 이와 같은 작업을 수행합니다.
statement = con.prepareStatement("SELECT * from employee WHERE userID = ?");
statement.setString(1, userID);
ResultSet rs = statement.executeQuery();
'?'를 사용하여 PreparedStatements를 사용하여 문자열에서 사용자 지정 매개 변수를 설정할 수 있습니다.
statement =con.prepareStatement("SELECT * from employee WHERE userID = ?");
statement.setString(1, userID);
ResultSet rs = statement.executeQuery();
사용자에게 직접 패스하는 경우쿼리 중인 ID는 SQL INJUCTION Attack의 공격을 받을 수 있습니다.
언급URL : https://stackoverflow.com/questions/12745186/passing-parameters-to-a-jdbc-preparedstatement
'programing' 카테고리의 다른 글
스크립트 클래스의 메서드에서 "함수가 아닙니다" 오류가 발생했습니다. (0) | 2023.10.19 |
---|---|
내 /wp-content/Uploads 폴더에 'cache' 폴더가 있는 이유는 무엇입니까? (0) | 2023.10.19 |
부모가 소유한 루트의 백분율 계산 (0) | 2023.10.19 |
스택 배열의 포인터에 액세스할 수 없는 이유는 무엇입니까? (0) | 2023.10.19 |
판다 버전 rbind (0) | 2023.10.19 |