再谈JDBC连结
为什么要反复谈JDBC连结,因为所以JDBC的性能,最主要的就是JDBC连结,而SQL语句的
优化,和JAVA编程无关,你的一个查询语句的效率,是你对于SQL语法的使用技巧,这一方
面你就可请教DBA,而不是来看我这种程序设计者的文章.
我们已经知道,取得数据库连结,有几种层次的实现方法,一是直接得到物理连结,而是通
过传统的连结池(没有多大区别),三是通过java的扩展包javax.sql.DataSource得到连结
句柄,对于上面两种,没有什么可以多说的,对于DataSource,我们再深入一些.
一般来说,DataSource是容器本身作为一个JDNI查找的对象返回出来的,也就是说要依赖
容器进行配置,而如果一个100%的应用程序(Application),比如基于swing的App,我根本
不需要运行容器,那我如何取得DataSource对象?这时可能要你自己写基于DataSource的
连结池了(是不是有些太深入了?要做就做高手,SUN能做我们就能做).
如果自己要实现DataSource,要清楚几个关系,即DataSource中返回的Connection是一个连
结的句柄,它要和实际的物理连结关连,这些实际的物理连结就是PooledConnection,我们
叫它池中的连结,可以通过实现ConnectionPoolDataSource,从中得到PooledConnection,
这部分本来是厂商实现的,但这部份实现和传统的连结池没有什么大的区别,主要是从
ConnectionPoolDataSource中得到PooledConnection的物理连结,但如何从PooledConnection
中getConnection(),返回给用户.这部分实现就是DataSource实现的性能高低的关键,一般
来说,我们可以先把一个物理连结PooledConnection和多个客户连结相关连来增加性能,也
就是一个PooledConnection本身再作为一个工场的种子,通过一个PooledConnection再返回
多个Connection,说白了就是多个Connection的请求通过一个PooledConnection传递给数据库.
只要用户调用Connection的close()方法,就打断这个Connetion与PooledConnection的关联而
让PooledConnection可以和新的Connection进行关联.
JDBC事务
JDBC1开始,就支持本地事务,所谓要地事务,就是在一个连结中的多个操作可以作为一个事务
过程来提交.注意,只要你使用conn.setAutoCommit(false);方法就隐式地打开了一个事务.当
事务被commit或abort时,隐含的是打开了一个新的事务.
另外,当一次事务被commit或abort,PreparedSattement和CallableStatement绑定的结果集全
部被关闭,而普通的Statement绑一的结果集将被维持.
在处理多个操作时:
conn.setAutoCommit(false);
Statement st1 = conn.createSatatement(sql1);
Statement st2 = conn.createSatatement(sql2);
Statement st3 = conn.createSatatement(sql3);
Statement st4 = conn.createSatatement(sql4);
st1.executeXXXXX();
st2.executeXXXXX();
st3.executeXXXXX();
st4.executeXXXXX();
在这里,我们要么把四个操作一起回滚,或一起提交,但如果我们认为,1-3的操作是要求一致完
成,而4的操作在一至三完成时再完成.在经前的版本中我们要把它们分开在两次事务中,但在
JDBC3.0以后,我们可以利用conn.setSavepoint() 来得到一个SavePoint来对同一事务中不同阶
段进行断点保存.然后可以在任何断点上进行提交和回滚.同时我们还可以利用
conn.setTransactionIsolation()来设置隔离级别.
要注意的是,对事务的支持要看数据库的具体实现.如果数据库本身不支持事务,那么以上的操作
都是无效的,可以从 DatabaseMetaData中查询数据库对事务的支持情况.
毕竟,本地事务功能并不是很强,而如果不是编程人员对SQL语句传入错误,那么在一次连结中
多个操作只完成部份的机率并不容易发生(当然有时还会发生的,要不本地事务就不会产生了).
其实,JDBC事务最重要的是分布式事务,即同时操作不同的连结,可能是同物理库的不同空间,也
可能是同一主机的不同数据库或不同主机的多个数据库.这就很难保证每个操作都是成功的,发
生操作不一致的机会太多了,可以说如果不在事务中测试你就无法相信操作的一致性.所以分布
式事务是JDBC的重要技术.
在下一节我们重点介绍JDBC分布式事务.
分享到:
相关推荐
JDBC高级应用JDBC高级应用JDBC高级应用JDBC高级应用
com.microsoft.sqlserver.jdbc.SQLServerException: 只进结果集不支持请求的操作 解决方案
Java连接达梦数据库驱动dm_jdbc: dm_jdbc\com.dameng.floader.jar dm_jdbc\com.dameng.impexp.jar dm_jdbc\Dm7Dictionary.jar dm_jdbc\Dm7JdbcDriver14.jar dm_jdbc\Dm7JdbcDriver15.jar dm_jdbc\Dm7JdbcDriver16....
Sybase官方的JDBC驱动程序——jConnect 驱动类名:com.sybase.jdbc3.jdbc.SybDriver 连接URL:jdbc:sybase:Tds:host:port/database?property_name=value
"jdbc:pivotal:greenplum://xxx:5432;DatabaseName=core_db", "gpadmin", "gpadmin"); Statement st = db.createStatement(); ResultSet rs = st .executeQuery("SELECT * FROM core_db.analysis_user limit 100"); ...
1.批处理:对数据库的CRUD速度会有质的飞跃.经常在对批量CUD的时候进行. 2.数据库连接池:把对数据库的连接放入一个容器中,要的时候就取,不需要的时候就还会去.程序启动的时候慢点,后期...dbcp JDBC连接池 ............
国产瀚高数据库jdbc驱动jar,driver=com.highgo.jdbc.Driver jdbcurl=jdbc:highgo://ip:5866/highgo
Maven坐标:org.springframework:spring-jdbc:5.3.15; 标签:spring、springframework、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译...
使用jdbc连接greenplum database所需要的依赖jar包。
jdbc:odbc:name 用 COM.ibm.db2.jdbc.net.DB2Driver 连接到 DB2 数据库 一个 DB2 URL 的示例: jdbc:db2://aServer.myCompany.com:50002/name 用 com.sybase.jdbc.SybDriver连接到 Sybase 数据库 一个 Sybase URL...
深入JDBC高级封装,包括jdbc核心机制以及ormaping框架hibernate ,ejb
1、在应用中jdbc url最前面添加jdbc:log4;比如oracle的url就变成了jdbc:log4jdbc:oracle:thin:@x.x.x.x:1521:dbname; 2、在日志系统中设置jdbc.sqlonly、jdbc.sqltiming等日志级别,可直接将log4jdbc doc中的日志...
Greenplum官方驱动JDBC版本5.1.4 官方驱动,相比PG驱动肯定要好用点。 驱动类:com.pivotal.jdbc.GreenplumDriver 驱动URL头:jdbc:pivotal:greenplum:
DmJdbcDriver18 编程资料 觉得好的资料
1、写在开头 标题之前我想说一下Linux的mysql真的实在是太坑了。太坑了。总是会出现这样那样的你想不到的问题。崩溃了。首先来罗列一下我遇到过的...Cause:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorExcepti
sap JDBC数据源配置sap JDBC数据源配置sap JDBC数据源配置
Cause com.mysql.jdbc.exceptions.jdbc4.CommunicationsException The last packet successfully received from the server was 47,795,922 milliseconds ago. The last packet sent successfully to the server was...
个人测试使用,ha-jdbc的jar包,个人测试使用,ha-jdbc的jar包,个人测试使用,ha-jdbc的jar包,
包括存储过程和高级数据类型,它们可以通过使用 JDBC 的 Java 应用程序执行。教程中的示例代码是为 DB2 通用数据库 7.2 编写的,但因为使用了 DataSource 对象, 修改这些代码以适用于其它数据库是不成问题的。...
JDBC事物应用源码文件JDBC事物应用源码文件JDBC事物应用源码文件