我總是閱讀博客Java Revisited,今天我正在閱讀文章Why use PreparedStatement in Java JDBC - Example Tutorial。在一個點上筆者寫了關於查詢的參數,那就是更好的,更安全,更表演使用API提供比來連接字符串的參數,並使用下面的例子:即使值始終相同,參數化PreparedStatement是否更好?
SQL查詢1:PreparedStatement的使用字符串連接
String loanType = getLoanType();
PreparedStatement pstmt = conn.prepareStatement("select banks from loan where loan_type=" + loanType);
SQL查詢2:使用PreparedStatement的
PreparedStatement pstmt = conn.prepareStatement("select banks from loan where loan_type=?");
pstmt.setString(1, loanType);
筆者解釋說,通過使用參數,JDBC驅動程序將檢查數據和連接字符串司機d參數化查詢它不會運行發送的SQL,即如果我們有着名的OR 1 = 1
,查詢將始終返回true,並且有經典的SQL注入情況。
我不清楚的是,爲什麼一個人比另一個更具表現力,再加上,如果我的價值總是相同的,這是真的嗎?
PreparedStatement pstmt = conn.prepareStatement(select * from users where active = 'S');
或者是更多表演用途如下:
PreparedStatement pstmt = conn.prepareStatement(select * from users where active = ?);
pstmt.setString(1, "S");
另一個問題是,在這種情況下,我認爲安全問題是一樣的,因爲沒有參數,通過用戶傳遞有沒有攻擊,對吧?
不幸的是,人們在不解釋原因的情況下保持低調。多麼可憐! –