六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

JDBC學習筆記-jdbc優化性能

[摘要]jdbc程序的性能主要由兩個因素決定,一是數據庫本身的性質,另一個是與數據庫相對獨立的jdbc應用程序接口(api)的使用.這里說的是如何正確使用jdbc編程接口,以獲得更好的性能. jdbc主要...
jdbc程序的性能主要由兩個因素決定,一是數據庫本身的性質,另一個是與數據庫相對獨立的jdbc應用程序接口(api)的使用.這里說的是如何正確使用jdbc編程接口,以獲得更好的性能.
jdbc主要優化有:
1.選擇正確的jdbc驅動程序
2.Connention的優化 使用連接池來管理Connection對象
3.Statement的優化 使用批量更新等
4.Result的優化 正確的從數據庫中get數據等

(1)選擇正確的jdbc驅動程序:
1 jdbc-odbc 橋
2 本地api-部分 java驅動
3 jdbc網路協議-純java驅動
4 jdbc本地協議
最好選擇 jdbc網路協議-純java驅動 效率比較高 但需要第三方軟件的支持 比如corba weblogic屬于這種類型

(2)優化Connection對象:
1.設置適當的參數 DriverManager.getConnection(String url,Properties props);
例如: Properties props=new Properties();
props.put("user","wuwei");
props.put("password","wuwei");
props.put("defaultRowPrefectch","30");
props.put("dufaultBatchValue","5");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@hostsString",props);
對象可以通過設置setDefaultRowPrefetch(int) 和 setDefaultBatchValue(int) 兩個參數類優化連接

2.使用連接池 可以自己寫一個連接池 這樣程序的靈活性強,便于移植.
apache項目開發了一套非常通用而表現非常穩定的對象池 http://jakarta.apache.org/commons/pool.htm
設計了自己的連接池后 在客戶端調用建立對象
public Object makeObject() throws Exception{
Class.forName("oracle.jdbc.driver.OracalDriver");
return DriverManager.getConnection("url","username","password");
}
銷毀對象時用
public void destroyObject(Object obj) throws Exception{
((Connection)obj.close());
}
注意幾點 對象池里有沒有回收機制,對象池里有機有容量限制,對象池里有多少個閑置對象(可以釋放)

3.控制事務的提交 最好手動提交事務,不但可以可以保證數據原子性,而且對新能提高留下余地.
try{
connection.setAutoCommint(false);
// 代碼 用PreparedStatement 性能比Statementh好.

connection.commit();
connection.setAutoCommit(true);
}
catch(SQLException e){
}
finally{
//代碼
if(connection!=null){
connection.close();
}
}

4.適當的選擇事務的隔離級別 TRANSACTION_READ_UNCOMMITED 性能最高
TRANSACTION_READ_COMMITED 快
TRANSACTION_REFEATABLE_READ 中等
RANSACTION_SERIALIZABLE 慢

(3)Statement 優化
jdbc3個接口用來處理sql的執行,是Statement PreparedStatement CallableStatement
提供適當的Statement接口
批量執行sql
從數據庫批量獲取數據
PreparedStatement 比Statement性能要好 主要體現在一個sql語句多次重復執行的情況
PreparedStatemnt只編譯解析一次而Statement每次編譯一次.

批量修改數據庫
Statement 提供了方法addBatch(String)和executeBatch()
調用方法為stmt.addBatch("isnert....."); stmt.addBatch("update.....")
stmt.executeBatch();
也可以用PreparedStatement從而更好的提高性能.
pstmt=conn.preparedStatement("insert into test_table(......) values(....?)");
pstmt.setString(1,"aaa");
pstmt.addBatch();
pstmt.setString(1,"bbb");
pstmt.addBatch();
.....
pstmt.executeBatch();

批量地從數據庫中取數據.
通過setFetchSize()和getFectchSize()方法來設定和查看這個參數.這個參數對體統的性能影響比較大.
這個參數太小會嚴重地降低程序地性能.
Connection Statement ResultSet都有這個參數,他們對性能地影響順序是:
ResultSet---------Statement---------Connection
(4)優化ResultSet.
體現在以下幾個方面
批量讀取數據.合理設置ResultSet的getFetchSize()和setFetchSize()方法中的參數
使用正確的get和set方法
使用整數而不是字段名作為參數性能比較高,
例如 setInt(1,100);
setString(2,"aaaa");
比 setInt("id","100");
setString("name","aaaa");
性能好
設置適當的滾動方向.有3個方向FETCH_FORWORD,FETCH_REVERSE FETCH_UNKNOWN
單向滾動性能比較高.
其他方面的性能優化
及時顯示的關閉Connection Statement ResultSet
其中Connection可以用Connetion Pool處理.
使用數據庫系統的強大查詢功能去組織數據.這樣程序運行是和數據庫服務的交互次數少,數據庫返回給
程序的記錄條數少的多,所以性能有很大的提高.




主站蜘蛛池模板: 最新国产网址 | 亚洲乱强伦 | 亚洲日本天堂在线 | 西瓜影院日韩大片在线观看 | 伊人狠狠色丁香婷婷综合下载 | 四虎4hu影库免费永久国产 | 亚洲欧美日韩另类在线专区 | 日本不卡视频一区二区 | 青草免费在线观看 | 四虎www成人影院观看 | 欧洲乱码专区一区二区三区四区 | 五月激激激综合网色播胖胖 | 色噜噜狠狠一区二区 | 青青青青青在线视频播放 | 日韩毛片视频 | 亚洲爱色 | 欧美午夜一区二区福利视频 | 日韩欧美国产三级 | 日本国产视频 | 日日插夜夜爽 | 手机看片福利盒子久久青 | 青草视频入口 在线观看 | 最近高清无吗免费看 | 亚洲国产中文字幕 | 亚洲天堂中文字幕在线观看 | 日本黄视频在线播放 | 亚洲国产日产无码精品 | 亚洲成人午夜影院 | 天天色网站 | 亚洲h在线观看 | 日本www色视频成人免费 | 日韩日韩日韩手机看片自拍 | 天天做爽夜夜做爽 | 亚洲天堂男人在线 | 四虎永久免费地址在线网站 | 日本在线视频网站www色下载 | 一级人做人爰a全过程免费视频 | 在线观看色视频 | 五月激情片| 天天做天天爱天天一爽一毛片 | 日本人视频18jizz免费 |