- 首頁(yè)|
- 網(wǎng)校|
- 焚題庫(kù)|
- APP |
-
微信公眾號(hào)
jdbc程序的性能主要由兩個(gè)因素決定,一是數(shù)據(jù)庫(kù)本身的性質(zhì),另一個(gè)是與數(shù)據(jù)庫(kù)相對(duì)愛貓撲.愛生活的jdbc應(yīng)用程序接口(api)的使用.
這里說(shuō)的是如何正確使用jdbc編程接口,以獲得更好的性能.
jdbc主要優(yōu)化有:
1.選擇正確的jdbc驅(qū)動(dòng)程序
2.Connention的優(yōu)化 使用連接池來(lái)管理Connection對(duì)象
3.Statement的優(yōu)化 使用批量更新等
4.Result的優(yōu)化 正確的從數(shù)據(jù)庫(kù)中g(shù)et數(shù)據(jù)等
(1)選擇正確的jdbc驅(qū)動(dòng)程序:
1 jdbc-odbc 橋
2 本地api-部分 java驅(qū)動(dòng)
3 jdbc網(wǎng)路協(xié)議-純java驅(qū)動(dòng)
4 jdbc本地協(xié)議
最好選擇 jdbc網(wǎng)路協(xié)議-純java驅(qū)動(dòng) 效率比較高 但需要第三方軟件的支持 比如corba weblogic屬于這種類型
(2)優(yōu)化Connection對(duì)象:
1.設(shè)置適當(dāng)?shù)膮?shù) 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);
對(duì)象可以通過(guò)設(shè)置setDefaultRowPrefetch(int) 和 setDefaultBatchValue(int) 兩個(gè)參數(shù)類優(yōu)化連接
2.使用連接池 可以自己寫一個(gè)連接池 這樣程序的靈活性強(qiáng),便于移植.
apache項(xiàng)目開發(fā)了一套非常通用而表現(xiàn)非常穩(wěn)定的對(duì)象池 http://jakarta.apache.org/commons/pool.htm
設(shè)計(jì)了自己的連接池后 在客戶端調(diào)用建立對(duì)象
public Object makeObject() throws Exception{
Class.forName("oracle.jdbc.driver.OracalDriver");
return DriverManager.getConnection("url","username","password");
}
銷毀對(duì)象時(shí)用
public void destroyObject(Object obj) throws Exception{
((Connection)obj.close());
}
注意幾點(diǎn) 對(duì)象池里有沒有回收機(jī)制,對(duì)象池里有機(jī)有容量限制,對(duì)象池里有多少個(gè)閑置對(duì)象(可以釋放)
3.控制事務(wù)的提交 最好手動(dòng)提交事務(wù),不但可以可以保證數(shù)據(jù)原子性,而且對(duì)新能提高留下余地.
try{
connection.setAutoCommint(false);
// 代碼 用PreparedStatement 性能比Statementh好.
connection.commit();
connection.setAutoCommit(true);
}
catch(SQLException e){
}
finally{
//代碼
if(connection!=null){
填寫下面表單即可預(yù)約申請(qǐng)免費(fèi)試聽java課程!害怕學(xué)不會(huì)?助教全程陪讀,隨時(shí)解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可全國(guó)推薦就業(yè)!
connection.close();
}
}
4.適當(dāng)?shù)倪x擇事務(wù)的隔離級(jí)別 TRANSACTION_READ_UNCOMMITED 性能最高
TRANSACTION_READ_COMMITED 快
TRANSACTION_REFEATABLE_READ 中等
RANSACTION_SERIALIZABLE 慢
(3)Statement 優(yōu)化
jdbc3個(gè)接口用來(lái)處理sql的執(zhí)行,是Statement PreparedStatement CallableStatement
提供適當(dāng)?shù)腟tatement接口
批量執(zhí)行sql
從數(shù)據(jù)庫(kù)批量獲取數(shù)據(jù)
PreparedStatement 比Statement性能要好 主要體現(xiàn)在一個(gè)sql語(yǔ)句多次重復(fù)執(zhí)行的情況
PreparedStatemnt只編譯解析一次而Statement每次編譯一次.
批量修改數(shù)據(jù)庫(kù)
Statement 提供了方法addBatch(String)和executeBatch()
調(diào)用方法為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();
批量地從數(shù)據(jù)庫(kù)中取數(shù)據(jù).
通過(guò)setFetchSize()和getFectchSize()方法來(lái)設(shè)定和查看這個(gè)參數(shù).這個(gè)參數(shù)對(duì)體統(tǒng)的性能影響比較大.
這個(gè)參數(shù)太小會(huì)嚴(yán)重地降低程序地性能.
Connection Statement ResultSet都有這個(gè)參數(shù),他們對(duì)性能地影響順序是:
ResultSet---------Statement---------Connection
(4)優(yōu)化ResultSet.
體現(xiàn)在以下幾個(gè)方面
批量讀取數(shù)據(jù).合理設(shè)置ResultSet的getFetchSize()和setFetchSize()方法中的參數(shù)
使用正確的get和set方法
使用整數(shù)而不是字段名作為參數(shù)性能比較高,
例如 setInt(1,100);
setString(2,"aaaa");
比 setInt("id","100");
setString("name","aaaa");
性能好
設(shè)置適當(dāng)?shù)臐L動(dòng)方向.有3個(gè)方向FETCH_FORWORD,FETCH_REVERSE FETCH_UNKNOWN
單向滾動(dòng)性能比較高.
其他方面的性能優(yōu)化
及時(shí)顯示的關(guān)閉Connection Statement ResultSet
其中Connection可以用Connetion Pool處理.
使用數(shù)據(jù)庫(kù)系統(tǒng)的強(qiáng)大查詢功能去組織數(shù)據(jù).這樣程序運(yùn)行是和數(shù)據(jù)庫(kù)服務(wù)的交互次數(shù)少,數(shù)據(jù)庫(kù)返回給
程序的記錄條數(shù)少的多,所以性能有很大的提高.
下一篇: 沒有了
初級(jí)會(huì)計(jì)職稱中級(jí)會(huì)計(jì)職稱經(jīng)濟(jì)師注冊(cè)會(huì)計(jì)師證券從業(yè)銀行從業(yè)會(huì)計(jì)實(shí)操統(tǒng)計(jì)師審計(jì)師高級(jí)會(huì)計(jì)師基金從業(yè)資格稅務(wù)師資產(chǎn)評(píng)估師國(guó)際內(nèi)審師ACCA/CAT價(jià)格鑒證師統(tǒng)計(jì)資格從業(yè)
一級(jí)建造師二級(jí)建造師消防工程師造價(jià)工程師土建職稱房地產(chǎn)經(jīng)紀(jì)人公路檢測(cè)工程師建筑八大員注冊(cè)建筑師二級(jí)造價(jià)師監(jiān)理工程師咨詢工程師房地產(chǎn)估價(jià)師 城鄉(xiāng)規(guī)劃師結(jié)構(gòu)工程師巖土工程師安全工程師設(shè)備監(jiān)理師環(huán)境影響評(píng)價(jià)土地登記代理公路造價(jià)師公路監(jiān)理師化工工程師暖通工程師給排水工程師計(jì)量工程師
人力資源考試教師資格考試出版專業(yè)資格健康管理師導(dǎo)游考試社會(huì)工作者司法考試職稱計(jì)算機(jī)營(yíng)養(yǎng)師心理咨詢師育嬰師事業(yè)單位教師招聘公務(wù)員公選考試招警考試選調(diào)生村官
執(zhí)業(yè)藥師執(zhí)業(yè)醫(yī)師衛(wèi)生資格考試衛(wèi)生高級(jí)職稱護(hù)士資格證初級(jí)護(hù)師主管護(hù)師住院醫(yī)師臨床執(zhí)業(yè)醫(yī)師臨床助理醫(yī)師中醫(yī)執(zhí)業(yè)醫(yī)師中醫(yī)助理醫(yī)師中西醫(yī)醫(yī)師中西醫(yī)助理口腔執(zhí)業(yè)醫(yī)師口腔助理醫(yī)師公共衛(wèi)生醫(yī)師公衛(wèi)助理醫(yī)師實(shí)踐技能內(nèi)科主治醫(yī)師外科主治醫(yī)師中醫(yī)內(nèi)科主治兒科主治醫(yī)師婦產(chǎn)科醫(yī)師西藥士/師中藥士/師臨床檢驗(yàn)技師臨床醫(yī)學(xué)理論中醫(yī)理論