JDBC 知识整理
数据持久化:
- 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘加以“固化”,而持久化的实现过程大多通过各种关系数据库来完成。
- 持久化的主要应用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。
- 在Java中,数据库存取技术可分为如下几类:
-JDO技术
-第三方O/R工具,如Hibernate,ibatis等
- JDBC是java访问数据库的基石,JDO,Hibernate等只是更好的封装了JDBC。
- JDBC(Java Data Base Connectivity,java数据库连接)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,使用这个类库可以以一种标准的方法,方便地访问数据库资源。
- JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。
- JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
- JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。
- JDBC接口(API)包括两个层次:
-面向数据库的API:Java Driver API,供开发商开发数据库驱动程序用。
数据库驱动:
- 我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数据库打交道。其实也就是数据库厂商的JDBC接口实现,即对Connection等接口的实现类的jar文件。
应用程序---->JDBC---->|
|---->Oracle驱动---->Oracle
JDBC驱动程序分类:
- JDBC驱动程序:各个数据库厂商根据JDBC的规范制作的JDBC实现类的类库
- JDBC驱动程序总共有四种类型:
-第二类:部分本地API部分Java的驱动程序。
-第三类:JDBC网络纯Java驱动程序。
-第四类:本地协议的纯Java驱动程序。
-第三、第四类都是纯Java的驱动程序,因此,对于Java开发者来说,他们在性能、可移植性、功能等方面都有优势。
ODBC:
- 早期对数据库的访问,都是调用数据库厂商提供的专有的API。为了在Windows平台下提供统一的访问方式,微软推出了ODBC(Open Data Base Connectivity,开放式数据库连接),并提供了ODBC API,使用者在程序中只需要调用ODBC API,由ODBC驱动程序将调用转换为对特定的数据库的调用请求。
- 一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS(Data Base Manager System,数据库管理系统),不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access,MySql还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据。
Java应用程序 ---> JDBC API ---> JDBC-ODBC桥 ---> ODBC API ---> ODBC层 ---> 数据库
- JDBC-ODBC桥本身也是一个驱动,利用这个驱动,可以使用JDBC-API通过ODBC去访问数据库。这种机制实际上是把标准的JDBC调用转换成相应的ODBC调用,并通过ODBC访问数据库
- 因为需要通过多层调用,所以利用JDBC-ODBC桥访问数据库的效率较低。
- 在JDK中,提供了JDBC-ODBC桥的实现类(sun.jdbc.odbc.JdbcOdbcDriver)
Java应用程序 ---> JDBC API ---> JDBC驱动程序 ---> 厂商提供的本地API ---> 数据库
- 这种类型的JDBC驱动程序使用Java编写,它调用数据库厂商提供的本地API。
- 通过这种类型的JDBC驱动程序访问数据库减少了ODBC的调用环节,提高了数据库访问的效率。
- 在这种方式下需要在客户的机器上安装本地JDBC驱动程序和特定厂商的本地API。
Java应用程序 ---> JDBC API ---> JDBC驱动程序 ---> 应用服务器 ---> 厂商提供的本地API ---> 数据库
- 这种驱动利用中间件的应用服务器来访问数据库。应用服务器作为一个到多个数据库的网关客户端通过它可以连接到不同的数据库服务器
- 应用服务器通常有自己的网络协议,Java用户程序通过JDBC驱动程序将JDBC调用发送给应用服务器,应用服务器使用本地程序驱动访问数据库,从而完成请求
Java应用程序 ---> JDBC API ---> JDBC驱动程序 ---> 数据库
- 多数数据库厂商已经支持允许客户程序通过网络直接与数据库通信的网络协议。
- 这种类型的驱动程序完全使用Java编写,通过与数据库建立的Socket连接,采用具体与厂商的网络协议把JDBC调用转换为直接连接的网络调用。
- JDBC API是一系列的接口,它使得应用程序能够进行数据库连接,执行SQL语句,并且得到返回结果。
- Driver接口:
在程序中不需要直接去访问实现了Driver接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现。
由数据库厂家提供,作为java开发人员,只需要使用Driver接口就可以了。在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序,不同的数据库有不同的装载方法。如:
-装载MySql驱动:Class.forName("com.mysql.jdbc.Driver");
-装载Oracle驱动:Class.forName("oracle.jdbc.driver.OracleDriver");
- Connection接口:
- JDBC URL的写法各个数据库不一样。它的标准由三部分组成,各部分用冒号分隔。如:
<协议>:<子协议>:<子名称>/<目标数据库名称>
-协议:JDBC URL中的协议总是jdbc
-子协议:子协议用于标识一个数据库驱动程序,如mysql,Oracle等
-子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用字名称的目的是为了定位数据库提供足够的信息。
-连接MySql数据库:
Connection conn = DriverManager.getConnection("jdbc:mysql://host:port/database","user","password");