JDBC——建立连接——基础

  建立连接的本质就是获取Connection对象,它的方式有两种,

  第一种,Driver方式,可以直接通过驱动类,也可以通过驱动管理器类。实际中不使用,只学习的时候,或编写测试案例时使用。

  第二种,DataSource,数据源,它是一个接口,第三方提供实现。它支持的功能完全由第三方实现,最常见的有连接池(通常命名为XXPooledDataSource),分布式(通常命名为XADataSource)。本篇略,后续介绍C3P0和Hirika数据源。

  获取到Connection对象之后,可以查询数据库的元信息,执行SQL语句等。本篇只介绍查询元信息。

  本篇按照建立连接之前,连接对象本身,建立连接之后的顺序,介绍三个阶段中涉及到的核心对象。

1、Driver

  驱动接口,全称为java.sql.Driver,数据库厂商提供实现类。方法由三部分组成。建立连接,查询信息,兼容性检查。

1.1   建立连接

  建立连接的步骤如下:

  第一步,创建Driver对象。

  Driver driver = new com.mysql.cj.jdbc.Driver();

  第二步,调用connect方法。

  Connection connection = driver.connect(url, properties);

  url:数据库的url地址,例如mysql地址:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8

  properties:连接时需要的属性,用户名和密码是必须的,用户名的属性名称为user,密码的属性名称为password。

// 创建Driver对象, 实例化为mysql Driver
Driver driver = new com.mysql.cj.jdbc.Driver();
// 建立连接需要的url地址
String url = 
"jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8";
// 设置连接的属性
Properties properties = new Properties();
properties.put("user", "xx");
properties.put("password","xx");
// 获取Connection对象
Connection connection = driver.connect(url, properties);

1.2   查询信息

  查询版本信息,其他信息都封装在DriverPropertyInfo中,查看它需要建立连接。

// 创建Driver对象, 实例化为mysql Driver
Driver driver = new com.mysql.cj.jdbc.Driver();
// 驱动主版本号, 返回8
log.info("驱动的主版本号:{}", driver.getMajorVersion());
// 驱动的次版本号, 返回3, 说明版本号为8.3
log.info("驱动的次版本号:{}", driver.getMinorVersion());
// 建立连接需要的url地址
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8";
// 设置连接的属性,用户名,密码
Properties properties = new Properties();
properties.put("user", "xx");
properties.put("password","xx");
// 其他信息,封装对象DriverPropertyInfo。
log.info("驱动的其他属性:{}", JSON.toJSONString(driver.getPropertyInfo(url, properties)));

1.3  兼容性

// 驱动是否支持url,返回布尔值
log.info("驱动是否匹配此url地址:{}", driver.acceptsURL(url));
// 是否完全支持jdbc规范。
log.info("驱动是否完全支持jdbc规范:{}", driver.jdbcCompliant());

2、DriverManager

  DriverManager,驱动管理器,方法由三部分组成。管理驱动,建立连接,get & set属性。

2.1   管理驱动

  注册驱动,查询驱动,撤销驱动。

  注册驱动有两种方式。

  显示,调用DriverManager.registerDriver方法。

  隐式,在驱动类加载时,设置jdbc.drivers虚拟机变量时,会自动注册。

  查询驱动:

  getDriver(url):根据url地址查询驱动。

  getDrivers():所有驱动列表。

  撤销驱动:调用deregisterDriver(driver)方法。

// 注册驱动
DriverManager.registerDriver(driverInstance);
// 第二种方式, 设置jdbc:drivers
System.setProperty("jdbc:drivers","com.mysql.cj.jdbc.Driver");
// 查询驱动信息
log.info("DriverManager根据url查询驱动:{}", 
JSONArray.toJSONString(DriverManager.getDriver(url)));
log.info("DriverManager查询所有驱动:{}", 
JSONArray.toJSONString(DriverManager.getDrivers()));
// 撤销驱动
DriverManager.deregisterDriver(driverInstance);

2.2  建立连接

  建立连接,遍历已注册的驱动,逐个适配url地址。有三个方法。

  getConnection,

  getConnection(url, prop),

  getConnection(url, user, password)

2.3  get & set

  超时时间:loginTimeout, 单位为秒,当设置为0时,没有时间限制。

  LogWriter:日志的输出流。

3、Connection

  Connection, 连接对象,获取该对象是后续任何操作的前提条件。它的方法由四部分组成。

  执行sql:创建三种Statement对象。

  查询信息:获取DatabaseMeta,查询元信息。获取ClientInfo,客户端信息。

  数据库功能:是否自动提交,事务隔离级别,等等。

  类型映射:JDBC与Java对象相互转换时的映射关系,略。

3.1  执行sql

  创建Statement对象,createStatement以及它的重写。

  创建PreparedStatement对象,prepareStatement以及它的重写。

  创建CallableStatement对象,prepareCall以及它的重写。

3.2  查询信息

  元信息:

    getDatabaseMetaData,所有元信息

    catalog:get & set方法。catalog,数据库名称。

    schema:get & set方法。schema名称

  客户端信息: getClientInfo。

3.3  功能

  事务相关:

    隔离级别:get & setTransactionIsolation,返回值为int。

    是否只读:布尔属性readOnly的基础方法。

    存档点:set & release & rollback。

    回滚:rollback。

    提交:布尔属性autoCommit的基础方法。commit方法。

  其他:

    是否关闭: isClosed,close关闭。

3.4  类型映射

  TypeMap:get & set方法。第一个参数string为数据库类型,class为Java对象类型。

4、DatabaseMetadata

  元信息,主要有三类。

  版本信息:数据库版本,JDBC版本,驱动版本。

  实例信息:catalog, schema, table, column等信息。

  变量:各类数据库的变量。

4.1  版本信息

// 数据库版本
log.info("数据库的厂商:{}", metaData.getDatabaseProductName());
log.info("数据库的版本号:{}.{}", metaData.getDatabaseMajorVersion(), metaData.getDatabaseMinorVersion());
// 驱动版本号
log.info("Driver的名称:{}", metaData.getDriverName());
log.info("Driver的版本:{}", metaData.getDriverVersion());
log.info("Driver的版本:{}.{}", metaData.getDriverMajorVersion(), metaData.getDriverMinorVersion());
// JDBC版本号
log.info("JDBC的版本号:{}.{}", metaData.getJDBCMajorVersion(), metaData.getJDBCMinorVersion());

4.2  实例信息

  catalog-->schema--->table--->column(列定义信息等),只列举了schema。

ResultSet schema = metaData.getCatalogs();
while (schema.next()){
	// 数据库信息
	log.info("数据库的schema:{}", schema.getString(1));
}

4.3  变量

  连接信息

log.info("url:{}", metaData.getURL());
log.info("userName:{}", metaData.getUserName());

  数据库支持的函数。

log.info("所有的系统函数:{}", metaData.getSystemFunctions());
log.info("所有的数字函数:{}", metaData.getNumericFunctions());
log.info("所有的字符串函数:{}", metaData.getStringFunctions());
log.info("所有的日期函数:{}", metaData.getTimeDateFunctions());
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章