诗剑书生的专栏

我在灌江口上住,花开花落,不知流年度.雁过空遗秋色暮,抚琴细听梧桐雨. 轻舞残虹漫展书,云卷云舒,思愫万千缕.安得婵娟与共处,长作识字耕田夫.                   诗剑书生 于灌江口.听潮居

用户操作
[即时聊天] [发私信] [加为好友]
诗剑书生ID:axman
108453次访问,排名820好友0人,关注者15
一个男人. 一个写程序男人. 一个写程序并从程序中寻找快乐的男人. 一个写程序并从程序中寻找快乐又把快乐传递给大家的男人.
一个书生. 一个寂寞的书生. 一个寂寞的梅香竹影下敲声写韵的书生. 一个寂寞的梅香竹影下敲声写韵晨钟暮鼓中逸气扬剑的书生.
那个男人是位书生。没有人知道他的姓名,居无定所,行无定踪,亦耕亦读,或渔或樵。
axman的文章
原创 87 篇
翻译 0 篇
转载 0 篇
评论 161 篇
axman的公告
最近评论
ZangXT:醍醐灌顶
matay:能不能把这个打包mms的工程源代码共享一下?万分感谢!
mataym@gmail.com
axman:不用说明什么,一切都如我预料的那样.
在整个奥运开幕式期间,我一边看电视,一边访问
http://www.cctvolympics.com/main.php?type=vod这个地址,其间访问一百多次,没有一次成功.大多数时候是前端缓存的squid在报refuse(111).有时以过几分钟的等待,能出来页面,但Flash缓冲的进度条到了99%就一直停止在那儿.
……
myvicc:写得不错,等写下文
chinagavin:我是先读三位正向输出,然后再读三位反向输出来最终达到想要的结果。
文章分类
收藏
    相册
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 JDBC高级应用三收藏

    新一篇: 为什么要始终使用PreparedStatement代替Statement?  | 旧一篇: 常见的几个数据库insert into操作的主键返回值

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

    发表于 @ 2006年07月07日 08:34:00|评论(loading...)|编辑

    新一篇: 为什么要始终使用PreparedStatement代替Statement?  | 旧一篇: 常见的几个数据库insert into操作的主键返回值

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © axman