1. PreparedStatement
? ? ?PreparedStatement?預(yù)處理語句對象绞呈,可以避免SQL注入射赛,提高多次執(zhí)行同一條SQL語句的性能
? ???SQL注入:就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串趾痘,最終達到欺騙服務(wù)器執(zhí)行惡意的SQL命令
? ? 在JDBC應(yīng)用中,如果你已經(jīng)是稍有水平開發(fā)者,你就應(yīng)該始終以PreparedStatement代替Statement.也就是說,在任何時候都不要使用Statement.
? ???PreparedStatement的占位符:SQL語句中有java變量,該JAVA變量使用?作為占位符,每個?的值必須在該語句執(zhí)行之前,通過適當(dāng)?shù)膕etXXX 方法來提供,如setString();
? ??執(zhí)行SQL語句:使用?pstmt.executeQuery();方法來執(zhí)行查詢? ,使用 pstmt.executeUpdate();來執(zhí)行刪除
2.使用.properties屬性文件保存數(shù)據(jù)庫連接信息
? ? ? ? 在src目錄中,創(chuàng)建db.properties屬性文件笙纤,屬性文件中保存數(shù)據(jù)以key=value的形式,屬性文件中不能直接保存中文组力,屬性文件中key,value直接寫省容,沒有任何符號
? ? 使用 load(InputStream in); 加載屬性文件,例如:?prop.load(JdbcUtil.class.getClassLoader().getResourceAsStream("xxx.properties"));
? ? 使用 String getProperty(String key); 根據(jù)key獲取value燎字,例如:String value = prop.getProperty("jdbc.key");
3.DBCP
DBCP(DataBase Connection Pool)數(shù)據(jù)庫連接池腥椒,是java數(shù)據(jù)庫連接池的一種,由Apache開發(fā)候衍,通過數(shù)據(jù)庫連接池笼蛛,可以讓程序自動管理數(shù)據(jù)庫連接的釋放和斷開。單獨使用dbcp需要2個包:commons-dbcp.jar? ,??commons-pool.jar? 由于建立數(shù)據(jù)庫連接是一個非常耗時耗資源的行為蛉鹿,所以通過連接池預(yù)先同數(shù)據(jù)庫建立一些連接滨砍,放在內(nèi)存中,應(yīng)用程序需要建立數(shù)據(jù)庫連接時直接到連接池中申請一個就行妖异,用完后再放回去惨好。
優(yōu)點:提高效率,不需要對應(yīng)所有的請求臨時創(chuàng)建新的連接随闺,可以管理連接數(shù),是成熟的連接池組件蔓腐。
例:
dataSource = new BasicDataSource();//創(chuàng)建DBCP對象
dataSource.setUrl(url); //設(shè)置參數(shù) ↓
dataSource.setUsername(user);
dataSource.setPassword(password);
dataSource.setInitialSize(initSize);
dataSource.setMaxActive(maxSize);
dataSource.setMaxWait(maxWait);
4.JDBC中的事務(wù)處理
事務(wù):一組操作的邏輯單元矩乐, 一組添加 一組刪除 一組更新,事務(wù)具備四個特性(ACID)。
原子性(Atomicity):一個事務(wù)是一個不可分割的邏輯單元散罕,一個事務(wù)中分歇,所有的操作要么都成功,要么都失敗欧漱。
一致性(Consistency):事務(wù)執(zhí)行的前后职抡,保證數(shù)據(jù)的完整性和正確性。
隔離性(Isolation):多個事務(wù)并發(fā)執(zhí)行误甚,事務(wù)之間互不干擾
持久性(Durability):事務(wù)一旦提交缚甩, 對數(shù)據(jù)庫數(shù)據(jù)的影響是永久的
————
事務(wù)開啟:執(zhí)行第一條增刪改SQL語句,事務(wù)會自動開啟
?事務(wù)結(jié)束:commit 提交事務(wù) rollback 撤銷事務(wù)
JDBC默認自動提交事務(wù)
?JDBC中事務(wù)操作API:
? 獲取連接對象的默認事務(wù)提交方式:boolean getAutoCommit();
? 設(shè)置連接對象的事務(wù)提交方式:void setAutoCommit(boolean bo);
? 提交事務(wù):void commit();
? 回滾事務(wù):void rollback();
? 結(jié)論:當(dāng)出現(xiàn)一組操作(多條insert,update,delete) 的需求窑邦,必須關(guān)注事務(wù)擅威!