JDBC

前言(Preface)

  • JDBC做为服务器与数据库交互的技术,提供了Java访问数据库的解决方案。
    web项目之java实现
    JDBC是服务器端的内容,其本质上就是Java,即用Java语言访问数据库。在正式项目中,想要使用数据库执行SQL语句,通常是用户在浏览器上输入一个数据,然后发送给服务器,服务器再通过JDBC技术,将数据传给数据库,数据库接收保存数据,并作为SQL语句的一部分,从而进行操作数据库。是这样的关系。

1.What is the JDBC

JDBC是一组单词的缩写。Java Database Connectivity : Java访问数据库的解决方案。旨在用相同的方式访问不同的数据库,以实现与具体数据库无关的Java操作界面。JDBC 定义一套标准接口,即访问数据库的通用API,不同的数据库厂商根据各自数据库的特点去实现这些接口。

2.JDBC的缘来

  • Java是由Sun公司推出的一门主要用于服务器端开发的编程语言。而JDBC,作为Java语言的一部分,也是由Sun公司提出,主要用于Java访问数据库。那么面对市场上芸芸众多的数据库(比如MySql,Oracle,SqlServer,DB2等,以及一些不是很出名的数据库),因为每一个数据库的实现机制,开发公司都不一样,仅仅通过一套代码,去支持所有的数据库,这是不可能做到的(比如说市场上,目前主流数据库有5家,我需要写5套代码支持他们,而这个数据库,没准过两年又会多出来两家,我太累了)。为了解决这个问题,因为Java语言在当时流行之火热,Sun公司也比较强势,他是反过来这么想的,而事实证明也确实如此:Sun认为,我这门语言还是很牛的,不是说我要支持你们,而是应该你们要支持我,否则的话,你们的数据库发展就不好。
  • 于是Sun就这样做,我干脆只提供接口。我要访问数据库,就通过这个接口访问。接口是完全抽象的,没有任何实现。所以,Sun给我们提供的这个JDBC,它里面只声明了访问数据库的接口,并没有提供具体的实现类。实现类则由数据库的开发的公司去实现,谁开发的数据库,谁就来实现这个接口(MySql要实现这个接口,Oracle要实现,其他的数据库厂商都要实现)。
  • 数据库厂商为什么要必须实现这个接口,因为Java语言很流行,用户不会单独的去使用某个数据库,一定是通过某种语言访问它,所以一定要支持Java语言,这个数据库才能发展的好,否则的话,连Java语言都不支持,就发展的不好。所以必须得实现这个接口。MySql有Mysql的实现类,Oracle有Oracle的实现类。。。

3.JDBC的原理

  • Driver(驱动):Sun公司在推出JDBC这项技术的时候,只提出了访问数据库的接口,由各个数据库厂商提供具体的实现类。这个实现类,一般地,我们给它起了一个学名,不叫实现类,专业术语叫Driver驱动。即数据库厂商实现了那个接口,他所提供的那套实现类,我们就称之为驱动。英文名叫Driver。那么MySQL有MySQL的Driver,ORACLE有ORACLE的Driver,SqlServer有SqlServer的Driver。这些驱动,也就是实现类,都实现了统一的接口,但它们底层实现的代码是不同的。
  • DriverManager(驱动管理):有了驱动,即实现类,那么如何去实例化这个实现类,这个Sun也考虑到了,他怕开发者实例化这个类很不方便,因为这么多的数据库,到底应该实例化谁,怎么去实现,记忆起来也是很麻烦的。Sun是这样做的,他不但给我们提供了接口,还为我们提供了另外一个东西,叫做DriverManager,驱动管理者。DriverManager是一个类,这个类能够帮我们去实例化这些数据库的实现类。
  • 所以关系是这样的,Sun推出了Java语言,其中包含了JDBC技术,JDBC包含了Java访问数据库的统一接口,再由DriverManager来实例化各个数据库厂商提供的具体实现类。数据库厂商,就是生产厂家,开发数据库的那个公司。我们开发这个软件,厂商就是我们,你去到一个公司,你们公司给别人定制软件,你就是软件厂商,那还能是谁。
    PrincipleOfJDBC
  • JDBC,他只提供了一套接口,数据库去实现了这些接口,接口是一套,实现是多套。我们说JDBC是接口,但它不是一个接口,这项技术实际挺复杂的,它有好多个接口,而这些接口,它们从根上,其实都是由DriverManager统一管理,由这个驱动管理的工具。
    JDBC接口及数据库厂商实现:
    1.驱动管理:DriverManager
    2.连接接口:Connection,DatabaseMetaData
    3.语句对象接口:Statement,PreparedStatement,CallableStatement
    4.结果集接口:ResultSet,ResultSetMetaData

4.JDBC的使用

  • Sun,推出了JDBC技术,Sun只规定了接口,由数据库厂商提供具体的实现类,然后呢,DriverManager帮我们去实例化,比如说mysql的实现类,比如说Oracle的实现类,比如说,sqlserver的实现类,当然,这是有条件的。你告诉他点儿什么,它才能帮我们实例化,这是有条件的。
    jdbc的使用步骤
  • 注册驱动:Sun提供接口。数据库实现类。由DriverManager去实例化这个实现类,所以呢,这里面很关键的一个东西就是DriverManager,那DriverManager凭什么能够帮我们实例化实现类呢,凭的是我们需要给他一个前提条件。我们需要告诉他,我要用mysql的驱动,我还是要用oracle的驱动。我得告诉他,那我怎么告诉他呢。我们应该在使用它之前,做一件事儿,这件事儿,我们叫做注册驱动,我们需要注册驱动,注册驱动的本质,就是告诉DriverManager,我要用哪一套驱动。就是告诉他要使用哪一套驱动,就这个意思。
  • 创建连接:注册驱动是告诉DriverManager,要使用哪一套驱动,具体的代码实现就一句话,很容易,但原理非常重要。驱动注册完成以后,首先,我们需要调用DriverManager,它会帮我们实例化一些内容。DriverManager会给我们创建一个对象叫Connection,连接,这个连接对象是用来连接数据库的,有了它就能连上数据库。这个Connection,它也是一个接口,所以,DriverManager给我们返回的是接口类型。但它实际返回的是实现类。也就是说,我们通过接口类型去操作返回的具体的实现类,而无需关心它到底是哪一个实现类(Oralce,MySQL,或DB2等)。比如

    interface 饭
    class 大米饭
    饭 test(){
    return new 大米饭();
    }

  • 创建语句对象与执行SQL语句:创建好连接之后,我们利用这个连接Connection,可以创建一个东西叫做Statement,这个Statement是一个对象,它的作用是能够帮我们执行sql语句,通过调用Statement对象内部的一些方法执行不同类型的sql。最常用的方法有
    1. executeUpdate(),这个方法专门执行DML语句
    2. executeQuery(),这个方法专门执行DQL语句
    3. execute(),这个方法可以执行所有sql语句,但一般用来执行除了DML和DQL之外的,比如DDL语句。

注:不过一般我们在做项目时,创建SQL的语句,都是提前,都执行完了,一般也不会用到execute()这样的方法去执行。就总之这个方法很少用,一般都是用这俩,executeUpdate()和executeQuery()。

  • 我们想访问数据库,首先,我们需要注册驱动,然后,调用DriverManager创建连接,由连接创建Statement,再由Statement调方法,执行sql。最后还有一步,sql执行完以后,一定要做一件事儿,我们需要关闭连接。一定要把连接关了,因为数据库,他的连接是有限的。一般上限就是五六百。超过这个数量,它就要崩溃了,所以一定要关闭连接。

  • 总结:使用JDBC访问数据库开发步骤

    1. 注册驱动Driver(或者称 加载驱动)
    2. 调用DriverManager建立连接Connection
    3. 由连接Connection创建语句对象Statement
    4. 调用Statemtent对象的方法执行SQL语句
    5. 处理结果集(仅限于DQL语句)
    6. 关闭连接

5.添加数据库对应的jdbc依赖包

不同的数据库有不同数据库的实现类,即驱动Driver。Oracle有Oracle的Driver,MySQL有MySQL的Driver,在Java的JDK里默认是没有这些驱动包的,需要我们自己单独导入。下面以导入Oracle的驱动为例:具体操作步骤见文章:Maven

6.代码实现之第一版:注册驱动与创建、关闭连接

7.代码实现之第二版:代码封装与参数提取

8.代码实现之第三版:创建语句对象与执行SQL语句

9.代码实现之第四版:利用连接池重构DBTool工具类

10.代码实现之第五版:利用PreparedStatement替代Statement执行SQL

11.代码实现之第六版:JDBC对事物的支持与模拟案例

12.代码实现之第七版:批量执行DML语句

13.代码实现之第八版:获取自动生成的序列ID

14.代码实现之第九版:JDBC对分页的实现

15.代码实现之第十版:JDBC对业务层的封装与总结

参考文献(References)

文中如有侵权行为,请联系me。。。。。。。。。。。。。
文中的错误,理解不到位的地方在所难免,也请指教!在成长过程中,也将继续不断完善,不作为专业文章。不喜勿喷。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值