JDBC------Java Database Connectivity
一.数据持久化
持久化(persistence): 把数据保存到可掉电式存储设备中以供之后使用. 大多数情况下, 特别是企业级应用, 数据持久化意味着将内存中的数据保存到硬盘上加以”固化”, 而持久化的实现过程大多通过各种关系数据库来完成.
持久化的主要应用是将内存中的数据存储在关系型数据库中, 当然也可以存储在磁盘文件、XML数据文件中.
二.Java中的数据存储技术
① JDBC直接访问数据库
② JDO技术(即Java Data Object)
③ 第三方O/R工具, 如: Hibernate, ibatis等
JDBC是Java访问数据库的基石, JDO、Hibernate等只是更好的封装了JDBC.
三.JDBC基础
JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API), 定义了用来访问数据库的标准Java类库, 使用这个类库可以以一种标准的方法、方便地访问数据库资源.
JDBC为访问不同的数据库提供了一种统一的途径, 为开发者屏蔽了一些细节问题.
JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统, 这样就使得程序员无需对特定的数据库系统的特点有过多的了解, 从而大大简化和加快了开发过程.
JDBC驱动程序由数据库厂商实现.
JDBC编程是一种面向接口的编程, 我们在程序中用的是java.sql下的Connection接口, 但是该接口在java包里并没有具体的实现, 其实现就是JDBC驱动程序.
1.JDBC体系结构
JDBC接口(API)包括两个层次:
-
面向应用的API: Java API, 抽象接口, 供应用程序开发人员使用(连接数据库, 执行SQL语句, 获得结果).
-
面向数据库的API: Java Driver API, 供开发商开发数据库驱动程序用.
2.JDBC驱动程序
JDBC驱动程序: 各个数据库厂商根据JDBC的规范制作的 JDBC 实现类的类库
JDBC分类:
- 第一类: JDBC-ODBC桥.
- 第二类: 部分本地API部分Java的驱动程序.
- 第三类: JDBC网络纯Java驱动程序.
- 第四类: 本地协议的纯 Java 驱动程序.
- 第三、四两类都是纯Java的驱动程序, 因此, 对于Java开发者来说, 它们在性能、可移植性、功能等方面都有优势.
第一类: JDBC-ODBC桥
第二类: 部分本地API部分Java的驱动程序.
第三类: JDBC网络纯Java驱动程序. 一般在做JSP网站开发时用.
第四类: 本地协议的纯 Java 驱动程序.
我们之后主要将的是第四类: 本地协议的纯 Java 驱动程序. 其实, 第三类和第四类差不多.
四.JDBC API
JDBC API 是一系列的接口, 它使得应用程序能够进行数据库联接, 执行SQL语句, 并且得到返回结果.
通过Driver Manger我们能获取到代表数据库连接的Connection, 通过Connection我们能获取到用于执行SQL语句的 Statement , 通过Statement 我们能获取到代表查询结果的 Result.
五.Driver接口
- Java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口. 这个接口是提供给数据库厂商使用的, 不同数据库厂商提供不同的实现.
- 在程序中不需要直接去访问实现了 Driver 接口的类, 而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现
- 但是我们是可以通过Driver接口来获取数据库连接的.
- 注意: 数据库的连接是稀缺资源, 用完后必须要关闭连接.
1.将JDBC驱动引入项目
- ①下载需要的 JDBC 驱动
- ②在项目下新建一个 lib 目录.
- ③将用到的 JDBC 驱动(jar文件, 例: mysql-connector-java-8.0.15.jar)放入该目录.
- ④在 lib 目录下的 JDBC 驱动上, 右键单击, 依次选择 “构建路径”, “添加至构建路径”.
- 之后, JDBC驱动就成功导入项目了, 在 “引用的库” 里面可以看到.
2.Driver获取mysql的连接
注意: 测试时要开启MySQL服务
1 | import java.sql.SQLException; |
3.Driver获取任何数据库的连接
编写一个通用的方法, 在不修改Java源码的情况下, 可以获取任何数据库的连接
解决方案: 将Driver接口实现类的全类名、要连接数据库的URL、数据库用户名user、用户名密码password放进一个配置文件里.
通过修改配置文件的方式实现和具体的数据库解耦.
在项目的src目录下, 新建一个 jdbc.properties 文件, 内容:
1 | #SQL Server DB |
1 | import java.sql.SQLException; |
你只需关闭properties文件里某个数据库配置的注释, 注释其他的数据库配置. 就可以得到不同的数据库连接
4.关于连接字符串
对于 MySQL 的连接字符串,自 Connector 8.0 新版本之后,jdbcUrl 必须添加 serverTimezone 属性。
当然,一般这样设置就OK了:
1 jdbcUrl=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false更多新增内容,详见 MySQL 官网 doc。