JDBC核心技术二(获取数据库连接)
系列笔记目录
- JDBC核心技术一(概述)
- JDBC核心技术二(获取数据库连接)
- JDBC核心技术三(PreparedStatement)
- JDBC核心技术四(Blob字段和批量插入)
- JDBC核心技术五 (数据库事务)
- JDBC核心技术六(数据库连接池)
- JDBC核心技术七(CallableStatement)
JDBC学习笔记第二遍,操作数据库首先得获取数据的连接才能进行接下来的操作,记录下如何获取数据的连接,以MySQL 8.0.22为例;
一、 要素一:Driver接口实现类
1.1 Driver接口介绍
- java.sql.Driver接口:所有JDBC驱动程序需要实现这个接口(例如:MySQL的com.mysql.cj.jdbc.Driver、Oracle的oracle.jdbc.driver.OracleDriver);
- 在程序中不需要直接去访问实现了Driver接口的类,由驱动程序管理器类(java.sql.DriverManager)来调用这些Driver的实现;
1.2 加载JDBC驱动
1.2.1 MySQL导入JDBC驱动
两种方式导入JDBC驱动
- 下载JDBC mysql驱动jar包导入项目;
- 使用maven方式关联mysql驱动依赖;
- 使用maven管理mysql JDBC驱动依赖:
<!-- mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
- 直接导入mysql JDBC驱动jar包到项目
1.2.2 加载MySQL JDBC驱动
导入jar包,可通过三种方式加载MySQL JDBC驱动
- 方式一:直接new驱动实现类对象
Driver driver = new com.mysql.cj.jdbc.Driver();
- 方式二:通过反射获取Driver对象
Class clzz = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver) clzz.newInstance();
- 方式三:通过DriverManager注册Driver
//1. 实例化driver
Class clzz = Class.forName(driverName);
Driver driver = (Driver) clzz.newInstance();
//2. DriverManager注册Driver
DriverManager.registerDriver(driver);
方式三中的DriverManager注册和实例化Driver的步骤可以省略,因为在DriverManager类会进行初始化,并去jar包配置文件中寻找DriverClass的名字
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
去jar包中寻找DriverClassName
二、要素二:URL
URL是连接数据库的地址以及编码方式等一些列信息,mysql的JDBC url如下所示:
- 常见的jdbcUrl:
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
三、要素三:用户名和密码
- user,password是数据库的用户名和密码,提供验证访问权限;
- user,password可以用“属性名=属性值”方式告诉数据库
- 可以调用 DriverManager 类的 getConnection() 方法建立到数据库的连接
通常有两种方式设置用户名、密码和jdbcurl
- 方式一: 硬编码方式
public void testConnection1() {
try {
//1.数据库连接的4个基本要素:
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "abc123";
String driverName = "com.mysql.jdbc.Driver";
//2.加载驱动 (①实例化Driver ②注册驱动)
Class.forName(driverName);
//Driver driver = (Driver) clazz.newInstance();
//3.注册驱动
//DriverManager.registerDriver(driver);
/*
可以注释掉上述代码的原因,是因为在mysql的Driver类中声明有:
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
*/
//3.获取连接
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
} catch (Exception e) {
e.printStackTrace();
}
}
- 方式二:配置文件配置信息(推荐使用)
配置文件jdbc.properties
user=root
password=root
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
driverClass=com.mysql.cj.jdbc.Driver
public void testConnection2() throws Exception {
//1.加载配置文件
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
Properties pros = new Properties();
pros.load(is);
//2.读取配置信息
String user = pros.getProperty("user");
String password = pros.getProperty("password");
String url = pros.getProperty("url");
String driverClass = pros.getProperty("driverClass");
//3.加载驱动
Class.forName(driverClass);
//4.获取连接
Connection conn = DriverManager.getConnection(url,user,password);
System.out.println(conn);
}
使用配置文件的好处:
- 实现了代码和数据的分离,修改数据库信息时可直接修改配置文件;
- 修改数据库配置文件信息后,不用重新编译即可生效;