6. sql注入問題:
1. 說明:使用者可以給程序傳入一些sql的片段來達到破壞sql語句的功能
2. 解決方式:使用PreparedStatement
7. PreparedStatement:
1. 與Statement的比較:
1. 是Statement的子接口,可以解決sql注入問題
2. 是預先編譯的sql,當語句沒有錯誤時才完成編譯,多次執行時只需要編譯一次,因此執行多次相同的sql語句時性能更好
3. 可以處理更多的數據類型
2. 使用步驟:
1. 創建PreparedStatement:
String sql="select * from _user where userName=? and pwd=?";
PreparedStatement ps=conn.prepareStatement(sql);
2. 給ps的點位賦值,索引從1開始,例如:
ps.setString(1, 'cyz');
ps.setInt(96);
ps.setDate(date);
3. 執行ps,可以使用execute,executeUpdate,executeQuery,例如:
ps.executeQuery(); //通常在查詢時,有查詢條件
ResultSet rs=ps.executeQuery();
ps.executeUpdate();
ps.execute(); //使用時execute()的()中不能有任何語句,否則會當作Statement處理
8. JDBC的事務控制:
1. 使用情況:當完成一個功能需要多個操作時一定要用到事務
2. 作用:防止出現異常時,同一個功能中的某些操作成功了,某些失敗了,如:A給B轉賬,A的錢沒有了B卻還沒轉過來
3. 前提:關閉自動提交,改爲手動提交
4. 語法:
conn.setAutoCommit(false); //設置爲手動提交,一般寫在獲得連接語句的後面
conn.commit(); //提交事務
conn.rollback(); //回滾事務,一般寫在catch語句中