JDBC(Java DataBase Connectivity)
本文主要是通过简单的例子理解JDBC运行的基础原理,以及简单的JDBC工具类如何创建与使用。
文章目录
前言
JDBC的理解
首先思考两个问题。
1、为何SUN定制的一套JDBC接口? (因为每一个数据库的底层实现原理都不一样。)
2、JDBC的本质? (一套接口。)
通过下面的图进行一个简单的梳理与关系介绍。
由上述可知,JDBC提供一套连接并操作数据库的接口,各大数据库厂家根据此接口编写了各自的相应实现类。
一、大致原理
本节主要通过简单的栗子来了解相应的底层原理。(作为编程人员,有时不需要磕相关的底层代码到底吖)
走一下思路,捋一下~
1、连接数据库的接口
2、实现者将各个数据库根据接口封装具体连接驱动的方法,实现此接口
3、调用者需要先创建我们想要连接的数据库对象
4、调用者根据相关的数据库来带调用此数据库的具体连接方法
自定义JDBC接口:
public interface JDBC {
default void getConnection(){
};
}
MySQL实现类:
public class MySQL implements JDBC{
@Override
public void getConnection(){
// 具体的实现代码与java程序员无关系,只需要会使用即可
System.out.println("连接MySQL数据库成功!");
}
}
Oracle实现类:
public class Oracle implements JDBC{
@Override
public void getConnection(){
System.out.println("连接Oracle数据库成功!");
}
}
应用主类:
public class JavaProgrammer {
public static void main(String[] args) throws Exception {
// 模拟实现
// 创建需要连接的数据库对象
JDBC jdbc = new MySQL();
// 调用连接方法
jdbc.getConnection();
// 如上,只是使用不同的数据库对象
JDBC jdbc1 = new Oracle();
jdbc1.getConnection();
}
}
二、Java中JDBC编程六步(Important!!!)
1.JDBC六大步骤
- 注册驱动
作用:告诉Java程序,即将要连接的是哪个品牌的数据库。- 获取连接
表示JVM进程和数据库进程之间的通道打开了,这属于进程之间的通信。重量级的,使用完后一定要关闭通道。- 获取数据库操作对象
专门执行sql语句的对象- 执行SQL语句
主要执行DQL和DML- 处理查询结果集
只有当第四步执行的是DQL(SELECT语句)时,才会有第五步的处理查询结果集。- 释放资源
使用完资源一定要关闭资源。Java和数据库之间的通信属于进程间的通信。若开启之后,一定要关闭!
【注】一般资源的释放需要从里到外进行释放。
2. 实际应用
在实际应用之前,先介绍一下需要了解的知识点
2.1 应用前准备
2.1.1 JDBC中url连接地址
格式:
jdbc:mysql://[host][,failoverhost...][:port]/[database] [?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]...
mysql的JDBC连接时的URL参数:
主要参数 | 参数说明 |
---|---|
user | 数据库用户名(用于连接数据库) |
password | 用户密码(用于连接数据库) |
useUnicode | 是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true |
characterEncoding | 当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk |
autoReconnect | 当数据库连接异常中断时,是否自动重新连接? |
autoReconnectForPools | 是否使用针对数据库连接池的重连策略 |
failOverReadOnly | 自动重连成功后,连接是否设置为只读? |
maxReconnects | autoReconnect设置为true时,重试连接的次数 |
initialTimeout | autoReconnect设置为true时,两次重连之间的时间间隔,单位:秒 |
connectTimeout | 和数据库服务器建立socket连接时的超时,单位:毫秒。 0表示永不超时,适用于JDK 1.4及更高版本 |
socketTimeout | socket操作(读写)超时,单位:毫秒。 0表示永不超时 |
举个小例子:
String url = "jdbc:mysql://localhost:3306/my_employees?useUnicode=true&characterEncoding=utf8&useSSL=true";
上述例子中,my_employees是数据库的名字;serverTimezone:url的时区使用中国标准时间,UTC+8才是准确时间。
2.1.2 URL:统一资源定位符
URL包括:
- 协议
- IP
- PORT
- 资源名
2.2 Statement作为数据库操作对象的应用实例
下面的栗子主要通过 MySQL驱动进行应用吖(其实什么驱动都可以,只要了解了原理,就很容易定位需要改动哪里啦)
根据上述JDBC连接数据库的6大步骤进行实例操作。(上述主要的六大步骤已经在代码中注释。)
package demo;
import com.mysql.jdbc.Driver;
import com.mysql.jdbc.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* @description: 通过简单的栗子,使用JDBC连接数据库并进行交互。
* @author: Grape_Pip
*/
public class JDBCDemo {
// 主入口
public static void main(String[