王朝网络
分享
 
 
 

JDBC高级应用三

王朝other·作者佚名  2006-12-26
宽屏版  字体: |||超大  

JDBC高级应用三

再谈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分布式事务.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有