1.4 細節(jié)問題
????????注冊驅動:告知程序要使用哪一個數(shù)據(jù)庫的jar包
????????????Class.forName("com.mysql.jdbc.Driver");
????????????注:mysql5版本以后挽荡,注冊驅動的語句可以省略
????????Connection連接對象
/*
* 參數(shù):
* 1.要連接的數(shù)據(jù)庫:
????????????jdbc:mysql://地址:端口號/庫名 ; 如果地址是本機宦棺,端口是3306簇宽,那么可以寫成:jdbc:mysql:///庫名
* 2.數(shù)據(jù)庫管理員身份的用戶名
* 3.數(shù)據(jù)庫管理員身份的密碼
*/
Statement執(zhí)行對象
用于執(zhí)行SQL語句
executeUpdate(String sql):執(zhí)行增刪改查虏辫,返回 int 值认然,表示影響的記錄數(shù)
executeQuery(String sql):執(zhí)行查詢妓布,返回結果集 ResultSet
ResultSet結果集對象
用于封裝查詢后的結果
????方法:
????????????????next():判斷是否有下一條可遍歷的記錄堡掏,返回布爾值
????????????????getXxx(參數(shù)):該方法有重載,參數(shù)可以是int吕座,也可以是String虐译;參數(shù)是int時字段值根據(jù)字段在結果集中的第幾列獲取吴趴;參數(shù)是String時字段值根據(jù)字段名獲取漆诽。
????????????????ResultSet、Statement锣枝、Connection都需要釋放 close()
????????形參與SQL語句中的關鍵字之間要有空格厢拭,否則關鍵字與參數(shù)拼接會報錯
1.5 SQL注入問題
????????用一些關鍵字與字符串進行拼接,會造成造成安全性的問題
????????????????例如:select * from user where username = 'qwer' and password = '1234' or '1' = '1'撇叁; '1' = '1' 是一個恒等式結果永遠為true供鸠,而 '1' = '1'前又使用了or關鍵字,從而導致了用戶名和密碼有誤也能成功登錄陨闹。
????????解決辦法:使用PreparedStatement對象
????????????1.? 參數(shù)參與SQL語句不再使用字符串的拼接楞捂,而使用了占位符
????????????????????????占位符中的關鍵字薄坏,不再以關鍵字的形態(tài)出現(xiàn)
1.5.1 PreparedStatement的獲取
????????????PreparedStatement pstmt = conn.preparedStatement(String sql);
????????????????將SQL語句預編譯
1.5.2 PreparedStatement的功能
????????????為占位符設置值
????????????????????setXxx(參數(shù)1寨闹,參數(shù)2)
????????????????????????參數(shù)1:問號的位置胶坠,從1開始
????????????????????????參數(shù)2:問號位置上的值
????????????執(zhí)行SQL
????????????????????????executeUpdate():執(zhí)行增刪改查,返回 int 值鼻忠,表示影響的記錄數(shù)
????????????????????????executeQuery():執(zhí)行查詢涵但,返回結果集 ResultSet