JDBC 详解(1)

12 篇文章 0 订阅
JDBC 详解(1)
        在以java application server应用为主的平台是,JDBC的最高级应用是DataSource的实现,其它的JDO,webcache,hibernate等不过是一种封装,所以看数据库应用的性能,主要看据库连结的利用率,所以,DataSource可以说是J2EE最最重要的应用.

        对于主流的数据库,如mysql,ms sqlserver,oracle,从其通用的性能来看,建议在JAVA平台上应用oracle和mysql,ms sqlserver的数据库在JAVA平台上的性能只能达到上述两种数据库的60-70%,在相同硬件的基础是,做同样的操作,测试了这三种数据库对并发的支持,MYSQL最高为430,ORACLE为400,SQLSERVER只有250.

        如果你不得不用SQLSERVER作为JAVA平台的数据库,那么一个合适的JDBC是最最重要的,ms sqlserver自己提供的JDBC到目前为止并不能真正支持DataSource,不过bea的weblogic8中已经内置了type4的ms sqlserver的JDBC,这是一个真正支持DataSource的JDBC,如果你不得不用sqlserver,你可以把这个JDBC从BEA的WLS中驳离出来.

        另外一点,如果你的J2EE应用主要集中在jsp/servlet,而后台数据库采用oracle的话,那么你有福了.你不要采用其它的WEB容器,在oracle8.17以后的版本中都内置了servlet引擎.如果你基于这个引擎,你会获得其它应用组合所无法比拟的性能,因为ORACLE的WEB容器是工作在数据库的地址空间,这就意味着,容器对数据库的访问是"本地文件存取方式",

虽然oracle也提供了标准的JDBC接口让调用者调用,但事实上这时的Connection对象只相当于一个文件句柄,而其它的JDBC连结都是封装了Socket,通过Socket和数据库进行通讯,如果你不理解这里的区别,那我打一个比方:就好象两个人面对面谈话和通过国际长途谈话的区别,这其间的性能怎一个高字了得.

        mysql从来就是被设计为"网络数据库",针对数据安全性不是太重要的应用.它的最大优点是通用,性能高,速度快,安全性较低,对于不是机密要件的应用,用MYSQL肯定没错.
        MS SQLSERVER,除了在JAVA平台上性能表现不好外,没有什么可说的,如果换在WIN平台上,它是顶级首选项,没有任何数据库在WIN平台上可以和它做任何方面的比较.
        ORACLE,JAVA平台上的老大,除去成本因素,在JAVA平台上没有理由不选择它. 

JDBC,JAVA平台的DATABASE的连通性.就是JAVA平台上和数据库进行连结的"工具".

接口:从下向上,接口是对"案例"的抽象,由一个案例抽象出一些规则.
         从上向下,被抽象出来的接口是对案例的一种承诺和约束.
也就是说,只要你实现我规定的接口,你的类就已经具有了接口对外承诺的方法,只要"客户"会操作接口,不需要重新学习就会操作实现了该接口的新类!
        1.通过接口可以实现不相关的类的相同行为. 
        2.通过接口可以指明多个类需要实现的方法.
        3.通过接口可以了解对象的交互方法而不需要了解对象所对应的类蓝本.

为了通用,JAVA中要求有一种机制,在操作不同厂商数据库时有相同的方法去操作,而不是每接触一种数据库就要学习新的方法.完成这种机制的"东西"就叫"JDBC"了.
简单地分,JDBC有两部分组成,JDBC API和JDBC Driver Interface.
JDBC API就是提供给"客户"的一组独立于数据库的API,对任何数据库的操作,都可以用这组API来进行.那么要把这些通用的API翻译成特定数据库能懂的"指令",就要由JDBC Driver Interface来实现了,所以这部分是面向JDBC驱动程序开发商的编程接口,它会把我们通过JDBC API发给数据库的通用指令翻译给他们自己的数据库.

还是通过实际操作来看看JDBC如何工作的吧.

因为JDBC API是通用接口,那么程序是如何知道我要连结的是哪种数据库呢?所以在和数据库连结时先要加载(或注册可用的Driver),其实就是JDBC签名.加载驱动程序和好多方法,最常用的就是先把驱动程序类溶解到内存中,作为"当前"驱动程序.注意"当前"是说内存中可以有多个驱动程序,但只有现在加载的这个作为首选连结的驱动程序.
Class.forName("org.gjt.mm.mysql.Driver");
Class.forName方法是先在内存中溶解签名为"org.gjt.mm.mysql.Driver"的Driver类,Driver类就会把相应的实现类对应到JDBC API的接口中.
比如把org.gjt.mm.mysql.Connection的实例对象赋给java.sql.Connection接口句柄,以便"客户"能通过操作java.sql.Connection句柄来调用实际的org.gjt.mm.mysql.Connection中的方法.至于它们是如果映射的,这是厂商编程的,"客户"只要调用Class.forName("org.gjt.mm.mysql.Driver");方法就可以顺利地操作JDBC API了.

一个普通数据库的连结过程为:
        1.加载驱动程序.
        2.通过DriverManager到得一个与数据库连结的句柄.
        3.通过连结句柄绑定要执行的语句.
        4.接收执行结果.

        5.可选的对结果的处理.

        6.必要的关闭和数据库的连结. 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值