![](/img/trans.png)
[英]Java : Passing null as Long in PreparedStatement (JDBC)
[英]Passing parameters to a JDBC PreparedStatement
我正在嘗試為我的程序創建驗證類。 我已經建立了與 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);
}
}
}
但它似乎不起作用。
您應該使用setString()
方法來設置userID
。 這既可以確保語句的格式正確,又可以防止SQL injection
:
statement =con.prepareStatement("SELECT * from employee WHERE userID = ?");
statement.setString(1, userID);
您的查詢有問題..
statement =con.prepareStatement("SELECT * from employee WHERE userID = "+"''"+userID);
ResultSet rs = statement.executeQuery();
您正在使用 Prepare Statement .. 所以您需要使用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);
如果您使用的是准備好的語句,您應該像這樣使用它:
"SELECT * from employee WHERE userID = ?"
然后使用:
statement.setString(1, userID);
?
將在您的查詢中替換為傳遞給setString
方法的用戶 ID。
看看這里如何使用PreparedStatement 。
做這樣的事情,這也可以防止SQL 注入攻擊
statement = con.prepareStatement("SELECT * from employee WHERE userID = ?");
statement.setString(1, userID);
ResultSet rs = statement.executeQuery();
您可以使用 '?' 使用 PreparedStatments 在字符串中設置自定義參數。
statement =con.prepareStatement("SELECT * from employee WHERE userID = ?");
statement.setString(1, userID);
ResultSet rs = statement.executeQuery();
如果您直接在查詢中傳遞用戶 ID,那么它可能會受到SQL INJECTION Attack 的攻擊。
問題是您需要添加“ ';” 在末尾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.