`
wind_bell
  • 浏览: 291264 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

JDBC高级应用(三)注:转

    博客分类:
  • 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分布式事务.  
分享到:
评论

相关推荐

    深入JDBC高级封装

    深入理解JDBC的高级封装对于提升数据库操作的效率和代码的可维护性至关重要。本话题将探讨JDBC的核心机制,以及如何通过ORM(Object-Relational Mapping)框架如Hibernate和EJB(Enterprise JavaBeans)来进一步优化...

    Sqlserver2000 JDBC 驱动

    (注:对于较新的版本,可能需要使用`com.microsoft.sqlserver.jdbc.SQLServerDriver`) 3. 创建连接:使用`DriverManager.getConnection()`方法建立与SQL Server的连接,需要提供数据库URL、用户名和密码: ```...

    was部署与配置手册

    - **启动命令**:`D:\IBM\WebSphere\AppServer\bin>startServer.bat server1` (注:server1 是默认服务器名,可根据实际情况调整) - **停止命令**:`D:\IBM\WebSphere\AppServer\bin>stopServer.bat server1` #####...

    how2j离线免费版.rar

    【标签】"java"表示该资源包主要围绕Java编程语言展开,涵盖了Java的基础知识、语法特性以及高级主题。"springboot"则说明了教程也包含了SpringBoot框架的使用,SpringBoot是Java生态中广泛使用的微服务开发框架,...

    jsp编程光盘,详细的源代码例程及注释,从初级到高级,具参考价值!

    JSP最终会被翻译成Servlet,它们都是基于Java的Web开发技术,但JSP更注重视图层,Servlet则更适合控制逻辑。 **五、JSP示例代码** 压缩包中的例程可能包括以下类型: 1. **Hello, World!**:基础的JSP页面展示,...

    整理后java开发全套达内学习笔记(含练习)

    注:float 和 double 的小数部分不可能精确,只能近似。 比较小数时,用 double i=0.01; if ( i - 0.01 ) ... 不能直接 if (i==0.01)... 默认,整数是int类型,小数是double类型 long类型值,需跟L或l在数据后;...

    Java学习书目(各学习阶段都有推荐)

    ### Java学习书目详解 #### 一、入门 1. **《Java 2从入门到精通》** - **推荐理由**:这本书非常...以上书籍涵盖了从Java基础到高级技术的各个方面,适合不同阶段的学习者根据自己的需求选择合适的教材进行学习。

    北大青鸟JSP电子教案

    这套教案详细覆盖了JSP的基础到高级应用,旨在帮助学习者深入理解和掌握JSP在实际Web开发中的运用。 JSP是Java平台上用于构建动态网站的技术,它允许开发者将静态内容与动态代码相结合,从而实现数据驱动的网页。...

    基于Servlet+反射技术的模仿天猫网站开发

    这是一个典型的J2EE(Java 2 Platform, Enterprise Edition)应用,涵盖了Web开发的基础和高级特性。以下将详细阐述相关知识点。 1. **Servlet**: Servlet是Java编程语言中的一个接口,用于扩展服务器的功能。在...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介  《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发...

    CDH550@hive 使用及操作说明

    **注**:若需在同一台主机上启动多个Metastore或HiveServer2实例,可通过更改端口号和日志路径实现。 - 启动带有指定端口的Metastore服务: ```bash nohup hive --service metastore -p 9045 --hiveconf hive....

    java2核心技术卷二

    Java是一种广泛应用于软件开发的语言,随着其不断的发展,越来越多的程序员选择学习和使用Java进行软件开发。《Java核心技术卷二》作为Java程序员和爱好者的重要参考资料,第八版对JDK6.0的新特性进行了详细阐述,...

    JSP深入详解

    5. **JSTL(JavaServer Pages Standard Tag Library)**:JSTL提供了一组标准标签库,包括核心标签、JDBC标签、XML标签和函数标签,以替代硬编码的Java代码,提高代码的可读性和可维护性。 6. **Servlet和JSP的关系...

    javaweb资料

    JavaWeb是Java技术在Web应用开发中的一个领域,它涵盖了从服务器端编程到客户端交互的各种技术。本资料集主要围绕JavaWeb开发的核心概念、技术和工具展开,旨在为学习者提供全面且深入的理解。 首先,JavaWeb开发的...

    jsp中文版教程PDF

    JSTL是一组标准标签库,包括核心、JDBC、XML等,提供更高级的控制结构和数据处理功能。 **JSP开发最佳实践:** 1. **分离关注点** - 尽量保持JSP页面只负责显示,业务逻辑和数据处理应在Servlet或JavaBeans中完成。...

    springmybatis

    (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加一条,其实大家可以看官方的教程更好些:http://mybatis.github.io/mybatis-3/,而且如果英文不是很好的那就看...

Global site tag (gtag.js) - Google Analytics