JAVA学习 -- JDBC获取数据库连接的5种方式
Posted 庸人冲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA学习 -- JDBC获取数据库连接的5种方式相关的知识,希望对你有一定的参考价值。
方式一
@Test
public void testConnection1() throws SQLException {
// 1. 创建Driver接口的实例, Driver接口是Sun公司定义的接口, 具体的实现类是各数据库厂家定义的。
Driver driver = new com.mysql.jdbc.Driver(); // 指定mysql实现类的全类名
// 2. 指定数据库url
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"; // 指定数据库的地址, 【mysql8一定要在后面加上时区】
// 3. 将用户名和密码以键值对的形式封装在Properties中
Properties info = new Properties(); // java.util.Properties
// 键的字段名不能变,否则不识别
info.setProperty("user","root"); // 设置用户名, 值为自己的数据库用户名
info.setProperty("password","1234"); // 设置密码, 值为自己的密码
// 4. 通过Driver类的实例调用connect 方法
// driver.connect(String url,Properties info);
Connection connect = driver.connect(url, info); // connect方法返回的是Connection接口具体实现类的对象、
System.out.println(connect); // 测试连接是否成功, 成功会输出Connection接口实现类对象的地址
// 连接成功: com.mysql.jdbc.JDBC4Connection@1e4a7dd4
}
方式二:对方式一的改进
// 方式二: 对方式一的迭代
// java程序的代码中尽量不要出现第三方的API 【提高程序的可移植性】
// 方式一中com.mysql.jdbc.Driver 就是mysql提供的第三方API, 解决方式是使用反射动态的获取Driver实现类对象
@Test
public void testConnection2() throws Exception {
// 1. 获取Driver接口的实现类的对象, 【使用反射】
Class clazz = Class.forName("com.mysql.jdbc.Driver");
// Driver driver = (Driver) clazz.newInstance();
// JDK9以上使用getDeclaredConstructor().newInstance() 获取类的对象
Driver driver = (Driver) clazz.getDeclaredConstructor().newInstance();
// 2. 提供要连接的数据库
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
// 3. 提供连接需要的用户名和密码
Properties info = new Properties();
info.setProperty("user","root");
info.setProperty("password","1234");
// 4. 获取连接
Connection connect = driver.connect(url, info);
System.out.println(connect);
}
方式三: 使用DriverManager替换Driver
java.sql.DriverManager是Sun公司提供的一个【类】,用于提供对一系列数据库管理的基础服务。
步骤:
- 调用DriverManager类中的registerDriver()静态方法。(注册驱动)
- 调用getConnection方法获取Connection实现类的对象。
// 方式三: 使用DriverManager替换Driver
// java.sql.DriverManager是Sun公司提供的一个【类】,用于提供对一系列数据库管理的基础服务
@Test
public void testConnection3() throws Exception {
// 1. 注册驱动
// 1) 获取Driver的实现类对象
Class<?> clazz = Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver) clazz.getDeclaredConstructor().newInstance();
// 2) 调用registerDriver()方法, Driver实现类对象作为参数
DriverManager.registerDriver(driver); // 注册驱动
// 2. 获取连接
// 1)提供getConnection()方法需要的三个连接的基本信息
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
String user = "root";
String password = "1234";
// 2)调用DriverManager.getConnection()方法获取Connection实现类对象
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
方式四:在方式三的基础上进行优化
Driver实现类被加载到内存时, 会调用其内部的静态代码块,自动注册驱动。
mysql中Driver的实现:
// 方式四: 在方式三的基础上进行优化
@Test
public void testConnection4() throws Exception {
// 1. 加载Driver到内存中
Class.forName("com.mysql.jdbc.Driver");
// 相较于方式三可以省略如下的操作:
// Driver driver = (Driver) clazz.getDeclaredConstructor().newInstance();
// DriverManager.registerDriver(driver);
// 2. 获取连接
// 1)提供getConnection()方法需要的三个连接的基本信息
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
String user = "root";
String password = "1234";
// 2)调用DriverManager.getConnection()方法获取Connection实现类对象
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
tips: 其实连Driver类加载的步骤都可以省略,因为在mysql驱动jar包中META-INF\\services\\ 路径下有一个java.sql.Driver的文件,里面保存了Driver类的包路径,当加载jar包时,会通过这个包路径将该类自动加载到内存中,但是!不推荐,因为不确保其他数据库可以这样操作。
方式五(Final版)
将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接。
步骤:
-
在src路径下创建.properties文件(后期使用.xml文件编写)
注意:如果在module下创建配置文件,当程序部署到tomcat服务器时该配置文件会缺失。
-
编写配置文件
-
读取配置文件中的4个基本信息
// 方式五:
@Test
public void testConnection5() throws Exception {
// 读取配置文件中的4个基本信息
// 1. 使用系统类加载器加载配置文件
ClassLoader classLoader = ConnectionTest.class.getClassLoader();
InputStream is = classLoader.getResourceAsStream("jdbc.properties");
// 2. 创建Properties实例
Properties pros = new Properties();
// 1)加载配置文件
pros.load(is);
// 2)获取指定key的值(Properties继承了Hashtable)
String user = pros.getProperty("user");
String password = pros.getProperty("password");
String url = pros.getProperty("url");
String driverPath = pros.getProperty("driver");
// 3. 加载驱动
Class.forName(driverPath);
// 4. 获取连接
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
// 这种方式的好处:
// 1. 当需要更换数据库时,只需要更改配置文件,无须更改上面的代码,实现了数据与代码的分离,实现了解耦。
// 2. 程序在部署到服务器时,会将代码编译生成的字节码文件打包,如果配置信息写在代码里,当需要修改配置信息时,就得重新打包。而将配置信息写在配置文件中,则不需要更改打包好的字节码文件
}
以上是关于JAVA学习 -- JDBC获取数据库连接的5种方式的主要内容,如果未能解决你的问题,请参考以下文章
Java学习笔记8.1.2 初探JDBC - JDBC编程步骤
Java学习笔记8.1.2 初探JDBC - JDBC编程步骤