五、 什么是JDBC驱动?

1、概要

​ 早期SUN公司想编写一套可以连接所有数据库的API,但是当他们刚刚开始时就发现这是不可完成的任务,因为各个厂商的数据库服务器差异太大了。后来SUN开始与数据库厂商们讨论,最终得出的结论是,由SUN提供一套访问数据库的规范(就是一组接口),并提供连接数据库的协议标准,然后各个数据库厂商会遵循SUN的规范提供一套访问自己公司的数据库服务器的API。SUN提供的规范命名为JDBC,而各个厂商提供的,遵循了JDBC规范的,可以访问自己数据库的API被称之为驱动!

ODBC(Open DataBase Connectivity)微软公司数据库系统应用程序接口规范,支持应用程序以标准的ODBC函数和SQL语言访问不同数据库。使用C语言,调用本地代码,程序移植性差。将简单与高级功能合,实现性能差,难以学习掌握。

2、驱动类型(四种)

2.1、JDBC-ODBC桥(了解)

  1. 说明

    是sun公司提供的,是jdk提供的的标准API. 这种类型的驱动实际是把所有 JDBC的调用传递给ODBC ,再由ODBC调用本地数据库驱动代码( 本地数据库驱动代码是指 由数据库厂商提供的数据库操作二进制代码库,例如在Oracle for windows中就是oci dll 文 件)
    
  2. 示例图

  3. 仅当特定的数据库系统没有相应的jdbc驱动的时候使用,JDBC兼容ODBC的过渡措施(测试/教学)

2.2、本地API驱动(Native API 了解)

  1. 说明

    JDBC API调用转换成原生的C/C++ API调用,这对于数据库来说具有唯一性。这些驱动程序通常由数据库供应商提供,并和JDBC-ODBC桥驱动程序同样的方式使用。该供应商的驱动程序必须安装在每台客户机上
    
  2. 结构图

2.3、网络协议驱动(重点)

  1. 说明

    JDBC客户端使用标准的网络套接字通信的中间件应用服务器。接口的信息,然后转换到调用的DBMS所要求的格式,并转发到数据库服务器的中间件应用服务器。这种驱动器是非常灵活的,因为它不需要安装在客户端上和实际上可以提供一个单一的驱动程序访问多个数据库。
    
  2. 结构图

2.4、本地协议驱动(重点)

  1. 说明

    纯粹的基于Java的驱动程序通过socket连接与供应商的数据库进行通信。这是可用于数据库的最高性能的驱动程序,并且通常由供应商自身提供。这种驱动器是非常灵活的,不需要在客户端或服务端上安装特殊的软件。此外,这些驱动程序是可以动态下载的。
    
  2. 示意图

2.5 、应使用哪个驱动程序?

  1. 如果访问的是以下类型的数据库,如Oracle,Mysql或DB2,那么首选驱动程序类型4。

  2. 如果Java应用程序在同一时间访问多个类型的数据库,类型3是优选的驱动程序。

  3. 类型2驱动程序在 第3类或4类驱动程序不可用时,去访问数据库的情况下用。

  4. 类型1驱动程序通常仅用于开发和测试目的

2.6、应常见的数据库驱动包

2.6.1 、Oracle数据库:
1、必要部分
  1. 驱动程序包名:ojdbcxx.jar

  2. 驱动类的名字:oracle.jdbc.driver.OracleDriver

  3. JDBC URL:jdbc:oracle:thin:@ip:port:db

2、JDBC URL说明:
  1. ip –为数据库服务器的IP地址,如果是本地可写:localhost或127.0.0.1。

  2. port –为数据库的监听端口,需要看安装时的配置,缺省为1521。

  3. db –为数据库的SID,通常为全局数据库的名字,默认的为orcl。

3、简单代码
//第一步:加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//第二步:建立连接
   /**url:   jdbc:oracle:thin:@127.0.0.1:1521:orcl
   *db_username:   数据库用户名
   *password: 用户密码
   */
Connection conn = DriverManager.getConnection(url,db_username,password);
//第三步:创建Statement对象
Statement statement = conn.createStatement();
//第四步:执行sql语句
    //查询sql语句
String sql = "select * from emp";

    //执行查询操作则返回结果集
resultSet =  statement.executeQuery(sql);

    //执行增删改操作返回int值
int count = statement.executeUpdate(sql);

    //理论上可以执行任何SQL语句,一般用来执行创建表的语句
boolean execute = statement.execute(sql)
if(true){//true 表示执行的查询操作返回结果集
  ResultSet resultSet = statement.getResultSet();
}else{//false 表示执行的增删改的操作
  int updateCount = statement.getUpdateCount();
}
2.6.1 、MySQL数据库
1、必要部分
  1. 驱动程序包名:mysql-connector-Java-xxx-bin.jar

  2. 驱动类的名字:com.mysql.jdbc.Driver

  3. JDBC URL:jdbc:mysql://ip:port/db?参数名1 =参数值1&参数名2=参数值2

    说明:

    ?key=value&key=value通常用来解决乱码问题,常用:?useUnicode=true&characterEncoding=UTF-8

2、JDBC URL说明:
  1. ip –为数据库服务器的IP地址,如果是本地可写:localhost或127.0.0.1。

  2. port –为数据库的监听端口,需要看安装时的配置,缺省为3306。

  3. db –数据库的名字

  4. 参数一:useUnicode=true

  5. 参数二:characterEncoding=UTF-8

results matching ""

    No results matching ""