JDBC——获取DBMS连接、优化与工具类封装
目录
一、JDBC介绍
二、获取DBMS连接
(一)获取连接
1.导入jar包或依赖到项目中
2.编写代码,获取连接
(二)获取连接优化
(三)通过配置文件封装工具类
1.在src下创建jdbc.properties文件
2.编写jdbc.properties文件
3.编写JDBCUtils工具类
4.编写测试类
一、JDBC介绍
编写Java的程序,实现对任意一个DBMS软件的数据进行增删改查,需要使用JDBC(java database connectivity)。JDBC是SUN公司发布的一套关于数据库的规范,实际上是一套接口,各个数据库厂商都需要实现这个接口,实现接口中的抽象方法。
好处:开发者只需要学会JDBC接口,就可以调用各个数据库厂商的内容,轻松实现增删改查。
各个数据库厂商提供JDBC这套接口的实现,这些实现称之为驱动。
去https://mvnrepository.com/artifact/com.mysql/mysql-connector-j/8.0.33 下载对应的jar包
二、获取DBMS连接
获取数据库连接需要4个内容:
- 数据库的用户名
- 数据库的密码
- 数据库的ip地址和端口号和数据库名称
- 数据库驱动(这里使用mysql8的驱动)
(一)获取连接
1.导入jar包或依赖到项目中
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
2.编写代码,获取连接
package com.test.demo;
import com.mysql.cj.jdbc.Driver;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class TestDemo {
public static void main(String[] args) {
// 用户名 密码 url
String username = "root";
String password = "root";
// jdbc:mysql://ip:端口号/数据库名称
// 如果ip是localhost 端口号是3306 可以省略ip和端口号
// String url = "jdbc:mysql://localhost:3306/mydb";
String url = "jdbc:mysql:///mydb";
Connection connection = null;
try {
// 注册驱动(让jvm知道使用的是哪一个DBMS软件)
// 在java项目中可以省略,不需要注册,mysql驱动包中存在一个服务发现机制
// 会去META-INF/services/java.sql.Driver中自动注册驱动
// 这个服务发现机制只限于java项目,在maven/web项目中无效
DriverManager.registerDriver(new Driver());
// 获取数据库的连接
connection = DriverManager.getConnection(url, username, password);
System.out.println(connection);
// com.mysql.cj.jdbc.ConnectionImpl@4be29ed9
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
if (connection != null) {
try {
// 关闭连接
connection.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
}
}
(二)获取连接优化
点击Driver类源码,发现有一个静态代码块中已经注册了驱动
所以不需要再次注册,只需要保证Driver类加载到方法区,就会自动执行静态代码块,就注册成功了。
(三)通过配置文件封装工具类
1.在src下创建jdbc.properties文件
2.编写jdbc.properties文件
jdbc.username=root
jdbc.password=root
jdbc.url=jdbc:mysql://localhost:3306/mydb
jdbc.driver=com.mysql.cj.jdbc.Driver
3.编写JDBCUtils工具类
package com.utils;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class JDBCUtil {
private static Properties properties = new Properties();
static {
// 静态代码块 读取properties文件中的内容
// 保证在类加载时执行一次 类只加载一次
try {
// 读取src下的文件
properties.load(new FileInputStream("jdbcdemo\\src\\jdbc.properties"));
// 注册驱动
Class.forName(properties.getProperty("jdbc.driver"));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 获取连接
*/
public static Connection getConnection() {
// 让Driver类加载到方法区
Connection connection = null;
try {
// 获取数据库的连接
connection = DriverManager.getConnection(
properties.getProperty("jdbc.url"),
properties.getProperty("jdbc.username"),
properties.getProperty("jdbc.password"));
} catch (Exception e) {
throw new RuntimeException(e);
}
return connection;
}
/**
* 释放连接资源
*/
public static void close(Connection connection) {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
public static void close(Connection connection, PreparedStatement preparedStatement) {
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
close(connection);
}
}
4.编写测试类
public class TestDemo2 {
public static void main(String[] args) {
Connection connection = JDBCUtil.getConnection();
System.out.println(connection);
// com.mysql.cj.jdbc.ConnectionImpl@350aac89
JDBCUtil.close(connection);
}
}