1)sql注入問題: 在拼接sql時,有一些sql的特殊關鍵字參與字符串的拼接,會造成安全性問題:
用戶名: 隨便輸入
密碼: a' or 'a' = 'a
生成的sql語句:
select * from user where username = 'abc' and password = 'a' or 'a' = 'a'
2)解決sql注入: PreparedStatement對象
(1)繼承於Statement
(2)表示預編譯的SQL語句的對象:
1:參數使用?作爲佔位符;
2:獲取PreparedStatement時,需要將預編譯的sql傳入進來;
(3)SQL語句已經預編譯存儲在PreparedStatement對象中,然後可以使用該對象多次有效的執行此語句;
使用
*/
public boolean login2(String username ,String password){
if(username == null || password == null){
return false;
}
//連接數據庫判斷是否登錄成功
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
//1.獲取連接
try {
conn = JDBCUtils.getConnection();
//2.定義sql
String sql = "select * from user where username = ? and password = ?";
//3.獲取執行sql的對象
pstmt = conn.prepareStatement(sql);
//給?賦值
pstmt.setString(1,username);
pstmt.setString(2,password);
//4.執行查詢,不需要傳遞sql
rs = pstmt.executeQuery();
//5.判斷
/* if(rs.next()){//如果有下一行,則返回true
return true;
}else{
return false;
}*/
return rs.next();//如果有下一行,則返回true
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtils.close(rs,pstmt,conn);
}
return false;
}