|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
java也能做一些底层语言开发做的事情(难度很高,不是java顶尖高手是做不来的),条记|功能|优化jdbc程序的功能次要由两个要素决意,一是数据库自己的性子,另外一个是与数据库绝对自力的jdbc使用程序接口(api)的利用.这里说的是怎样准确利用jdbc编程接口,以取得更好的功能.
jdbc次要优化有:
1.选择准确的jdbc驱动程序
2.Connention的优化利用毗连池来办理Connection对象
3.Statement的优化利用批量更新等
4.Result的优化准确的从数据库中get数据等
(1)选择准确的jdbc驱动程序:
1jdbc-odbc桥
2当地api-部分java驱动
3jdbc网路协定-纯java驱动
4jdbc当地协定
最好选择jdbc网路协定-纯java驱动效力对照高但必要第三方软件的撑持好比corbaweblogic属于这类范例
(2)优化Connection对象:
1.设置得当的参数DriverManager.getConnection(Stringurl,Propertiesprops);
比方:Propertiesprops=newProperties();
props.put("user","wuwei");
props.put("password","wuwei");
props.put("defaultRowPrefectch","30");
props.put("dufaultBatchValue","5");
Connectioncon=DriverManager.getConnection("jdbc:oracle:thin:@hostsString",props);
对象能够经由过程设置setDefaultRowPrefetch(int)和setDefaultBatchValue(int)两个参数类优化毗连
2.利用毗连池能够本人写一个毗连池如许程序的天真性强,便于移植.
apache项目开辟了一套十分通用而体现十分不乱的对象池http://jakarta.apache.org/commons/pool.htm
计划了本人的毗连池后在客户端挪用创建对象
publicObjectmakeObject()throwsException{
Class.forName("oracle.jdbc.driver.OracalDriver");
returnDriverManager.getConnection("url","username","password");
}
烧毁对象时用
publicvoiddestroyObject(Objectobj)throwsException{
((Connection)obj.close());
}
注重几点对象池里有无接纳机制,对象池里无机有容量限定,对象池里有几个闲置对象(能够开释)
3.把持事件的提交最妙手动提交事件,不仅能够能够包管数据原子性,并且对新能进步留下余地.
try{
connection.setAutoCommint(false);
//代码用PreparedStatement功能比Statementh好.
connection.commit();
connection.setAutoCommit(true);
}
catch(SQLExceptione){
}
finally{
//代码
if(connection!=null){
connection.close();
}
}
4.得当的选择事件的断绝级别TRANSACTION_READ_UNCOMMITED功能最高
TRANSACTION_READ_COMMITED快
TRANSACTION_REFEATABLE_READ中等
RANSACTION_SERIALIZABLE慢
(3)Statement优化
jdbc3个接口用来处置sql的实行,是StatementPreparedStatementCallableStatement
供应得当的Statement接口
批量实行sql
从数据库批量猎取数据
PreparedStatement比Statement功能要好次要表现在一个sql语句屡次反复实行的情形
PreparedStatemnt只编译剖析一次而Statement每次编译一次.
批量修正数据库
Statement供应了办法addBatch(String)和executeBatch()
挪用办法为stmt.addBatch("isnert.....");stmt.addBatch("update.....")
stmt.executeBatch();
也能够用PreparedStatement从而更好的进步功能.
pstmt=conn.preparedStatement("insertintotest_table(......)values(....?)");
pstmt.setString(1,"aaa");
pstmt.addBatch();
pstmt.setString(1,"bbb");
pstmt.addBatch();
.....
pstmt.executeBatch();
批量地从数据库中取数据.
经由过程setFetchSize()和getFectchSize()办法来设定和检察这个参数.这个参数对体统的功能影响对照年夜.
这个参数太小会严峻地下降程序地功能.
ConnectionStatementResultSet都有这个参数,他们对功能地影响按次是:
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_REVERSEFETCH_UNKNOWN
单向转动功能对照高.
其他方面的功能优化
实时显现的封闭ConnectionStatementResultSet
个中Connection能够用ConnetionPool处置.
利用数据库体系的壮大查询功效往构造数据.如许程序运转是和数据库服务的交互次数少,数据库前往给
程序的纪录条数少的多,以是功能有很年夜的进步.
你说是sun公司对她研究的透还是微软?针对自己工具开发的.net性能上肯定会站上风的。 |
|