JDBC學習筆記-----jdbc效能最佳化 (轉)
JC學習筆記-----
jdbc的效能主要由兩個因素決定,一是本身的性質,另一個是與資料庫相對獨立的jdbc應用程式介面()的使用.這裡說的是如何正確使用jdbc介面,以獲得更好的效能.
jdbc主要最佳化有:
1.選擇正確的jdbc程式
2.Connention的最佳化 使用連線池來管理Connection
3.Statement的最佳化 使用批次等
4.Result的最佳化 正確的從資料庫中get資料等
(1)選擇正確的jdbc驅動程式:
1 jdbc-odbc 橋
2 本地api-部分 驅動
3 jdbc網路-純java驅動
4 jdbc本地協議
最好選擇 jdbc網路協議-純java驅動 比較高 但需要第三方的支援 比如 LOGIC屬於這種型別
(2)最佳化Connection物件:
1.設定適當的引數 Manager.getConnection(String url,Properties props);
例如: Properties props=new Properties();
props.put("user","wuwei");
props.put("pass","wuwei");
props.put("defaultRowPrefectch","30");
props.put("dufaultBatchValue","5");
Connection con=DriverManager.getConnection("jdbc::thin:@hostsString",props);
物件可以透過設定setDefaultRowPrefetch(int) 和 setDefaultBatchValue(int) 兩個引數類最佳化連線
2.使用連線池 可以自己寫一個連線池 這樣程式的靈活性強,便於移植.
專案開發了一套非常通用而表現非常穩定的物件池
設計了自己的連線池後 在客戶端建立物件
public 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(Exception 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 提供了方法adtch(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可以用Coion Pool處理.
使用資料庫的強大查詢功能去組織資料.這樣程式執行是和資料庫服務的互動次數少,資料庫返回給
程式的記錄條數少的多,所以效能有很大的提高.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-982095/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JDBC學習筆記JDBC筆記
- JDBC與JavaBean學習筆記(二)JDBCJavaBean筆記
- Spring Boot 學習筆記(2):JDBCSpring Boot筆記JDBC
- JDBC學習日記JDBC
- JDBC學習JDBC
- Spring學習筆記3(JDBC模板&事務管理)Spring筆記JDBC
- weblogic JDBC標準化效能最佳化WebJDBC
- Java安全之JDBC Attacks學習記錄JavaJDBC
- Java學習:JDBC簡介JavaJDBC
- JDBC mysql 相關內容筆記JDBCMySql筆記
- Hive學習之JDBC訪問HiveJDBC
- Sharding-Jdbc學習筆記一之讀寫分離mysql安裝篇JDBC筆記MySql
- Sharding-Jdbc學習筆記二之讀寫分離專案配置篇JDBC筆記
- Java雲同桌學習系列(十六)——JDBCJavaJDBC
- 軟體測試學習教程——JDBC配置JDBC
- JDBCJDBC
- 軟體測試學習教程——JDBC開發JDBC
- 軟體測試學習教程——JDBC介紹JDBC
- 學習JDBC這一篇就夠了JDBC
- JAVAWEB學習總結,DAY4(JDBC1)JavaWebJDBC
- 【Spring】jdbcSpringJDBC
- JDBC概述JDBC
- JavaWeb——JDBCJavaWebJDBC
- SpringData JDBCSpringJDBC
- 【學習筆記】初次學習斜率最佳化的程式碼及筆記筆記
- JDBC 在效能測試中的應用JDBC
- 組合最佳化 學習筆記筆記
- 【springboot】學習4:整合JDBC、整合druid、整合mybatis、整合 SpringSecuritySpring BootJDBCUIMyBatisGse
- Doris JDBC 外表JDBC
- Testcontainer JDBC 支援AIJDBC
- 9.JDBCJDBC
- JDBC詳解JDBC
- JDBC快速上手JDBC
- Spring JDBC框架SpringJDBC框架
- Java 之 JDBCJavaJDBC
- Java之JDBCJavaJDBC
- 記錄錯誤: *Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ‘spec_templaMySqlJDBCExceptionError
- repuest轉發學習筆記一筆記
- 轉:ORACLE的JDBC連線方式:OCI和THINOracleJDBC