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.必要的关闭和数据库的连结.

JDBC 具体解释(1)的更多相关文章

  1. JDBC具体解释(2)

    1.载入驱动程序. 注冊驱动程序有多方法,Class.forName();是一种显式地载入.当一个驱动程序类被Classloader装载后,在溶解的过程中,DriverManager会注冊这个驱动类的 ...

  2. 69 个经典 Spring 面试题和答案

    Spring 概述 什么是spring?Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring 框架目标 ...

  3. Oozie

    Oozie的功能模块 workflow 由多个工作单元组成 工作单元之间有依赖关系 MR1->MR2->MR3->result hadoop jar:提交1个MR oozie:监控当 ...

  4. Hadoop生态圈-Oozie部署实战

    Hadoop生态圈-Oozie部署实战 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Oozie简介 1>.什么是Oozie Oozie英文翻译为:驯象人.一个基于工作流 ...

  5. 大数据技术之_14_Oozie学习_Oozie 的简介+Oozie 的功能模块介绍+Oozie 的部署+Oozie 的使用案列

    第1章 Oozie 的简介第2章 Oozie 的功能模块介绍2.1 模块2.2 常用节点第3章 Oozie 的部署3.1 部署 Hadoop(CDH版本的)3.1.1 解压缩 CDH 版本的 hado ...

  6. BATJ面试必会之 Spring 篇(一)

    译者:深海 校对:方腾飞 出自并发编程网 – ifeve.com 目录 Spring 概述 依赖注入 Spring beans Spring注解 Spring数据访问 Spring面向切面编程(AOP ...

  7. 《JSP+Servlet+Tomcat应用开发从零開始学》

    当当网页面:  http://product.dangdang.com/23619990.html 内容简单介绍      本书全面介绍了 JSP开发中涉及的相关技术要点和实战技巧. 全书结构清晰,难 ...

  8. 大数据技术之Oozie

      第1章 Oozie简介 Oozie英文翻译为:驯象人.一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache,提供对Hadoop MapReduce.Pig Jobs的任务调度与协 ...

  9. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

随机推荐

  1. vim设置为indent折叠以后,每次打开文件时代码处于折叠状态,能改变吗?

    vim设置为indent折叠以后,每次打开文件时代码处于折叠状态.即使这次编辑的时候把折叠展开,保存关闭文件,重新打开,所有的代码都又折叠起来了. 请问有没有默认不折叠的方法? 是否有可以一次展开所有 ...

  2. DDos攻击的一些领域知识——(流量模型针对稳定业务比较有效)不稳定业务采用流量成本的检测算法,攻击发生的时候网络中各个协议的占比发生了明显的变化

    在过去,很多防火墙对于DDoS攻击的检测一般是基于一个预先设定的流量阈值,超过一定的阈值,则会产生告警事件,做的细一些的可能会针对不同的流量特征设置不同的告警曲线,这样当某种攻击突然出现的时候,比如S ...

  3. x64汇编第三讲,64位调用约定与函数传参.

    目录 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 二丶x64汇编 2.1汇编详解 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 在x86下我们汇编的传参如下: ...

  4. RabbitMQ(三) 集群配置

    RabbitMQ--集群配置 之前不管是搞Redis.SQL.Mongo还是其他的东西,一律都没说过集群要怎么搞,电脑实在是带不动.说透彻点就是懒,懒得搭也懒得写,今日深刻意识到错误,做学问是不能懒的 ...

  5. LeetCode Weekly Contest 20

    1. 520. Detect Capital 题目描述的很清楚,直接写,注意:字符串长度为1的时候,大写和小写都是满足要求的,剩下的情况单独判断.还有:我感觉自己写的代码很丑,判断条件比较多,需要改进 ...

  6. UI常用网站

    网站大全 国外的花瓣--Pinterest • The world’s catalog of ideas 字体海洋--求字体网提供中文和英文字体库下载.识别与预览服务,找字体的好帮手 原创设计UI-- ...

  7. C-概览

    1.贝尔实验室的Dennis Ritchie在1972年开发了C语言,C来自于Ken Thompson的B语言.当时Ritchie正与 Thompson一起设计UNIX操作系统. 2.C是面向过程的编 ...

  8. html中map标签和area标签的应用

    map标签的用途:是与img标签绑定使用的,常被用来赋予给客户端图像某处区域特殊的含义,点击该区域可跳转到新的文档. 因为map标签是与img标签绑定使用的,所以我们需要给map标签添加ID和name ...

  9. Three.js入门——画星空(star field)

    Three.js是一个很流行的3D JavaScript库.这里有一个three.js的入门教程,在浏览器窗口中画出星空.我按照教程重新实现了一遍,这里的这篇博客把教程大致翻译了一遍.我的demo. ...

  10. 【华科考研机试题】最长&最短文本

    题目 输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出. 解题思路 1.输入所有字符串(有空格不另算字符串). 2.将char*字符串转换成s ...