JDBC是Java操作数据库的唯一方式,在市场上数据库产品非常多,JDK不可能为每一种产品都提供一种连接方式。
但JDK提供了一套标准化的接口--JDBC。数据库厂商想让JDK连接自家数据库就要提供符合该接口的连接驱动。
这些连接驱动JDK本身并不拥有,而是有数据库厂商提供。表现形式就是JAR包。
实质:
JDBC的实质是JDK提供的一系列标准化的接口,而我们学习的正是这些接口。这些接口统一规范了数据库如何去连接数据库。而数据库厂商提供的连接驱动的实质就是实现JDBC接口的实现类。表现形式就是Jar包。
public class Test01 {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/data_test?useUnicode=true&&characterEncoding=utf8";
String username = "root";
String password = "root";
Connection connection = null;
Statement statement = null;
try {
//1、注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2、获取连接对象
connection = DriverManager.getConnection(url, username, password);
//3、写SQL语句
String sql = "insert into t_user(id,name,age) values (1003,'AWM','16')";
//4、获取执行对象
statement = connection.createStatement();
//5、执行语句
statement.executeUpdate(sql);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
//6、关闭资源
if (statement != null){
statement.close();
}
if (connection != null){
connection.close();
System.out.println("关闭成功");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
(1)DriverManger
该类是一个工具类,主要实现的是注册驱动与获取连接对象,通过该类中的静态方法获取数据库的连接对象。
(2)Connection
连接类,通过该类中的方法可以获取prepareStatement执行SQL语句的对象。
(3)PrepareStatement
执行SQL语句并对SQL进行预编译,防止SQL注入。
(4)ResultSet
结果集对象,在执行查询的SQL语句是会返回这样一个结果集对象
数据库连接池是个容器,负责分配管理数据库的连接。
允许应用程序使用一个现有的数据库连接,而不需要频繁的创建与销毁连接
释放超过最大空闲时间的数据库连接,来避免因为没有释放数据库连接而引起的数据库连接遗漏。
优点:
1、资源重用
2、避免频繁创建与销毁,提升系统响应效率
3、避免数据库连接遗漏
使用连接池来获取连接对象,而不通过DriverManger。
首先要将使用的数据库连接池导入项目中,然后要自定义配置文件包含类加载的全类名,数据库连接的url,用户名和密码。即是原来DriverManger中需要做的事。
然后加载配置文件,通过数据库连接工厂类来创建数据库连接池。通过数据库连接池获取数据库的连接对象。
//准备工作
//导入数据库连接池Jar包
//定义配置文件
//加载配置文件
Properties prop = new Properties();
prop.load(Test02.class.getResourceAsStream("druid.properties"));
//获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//差获取连接对象
connection = dataSource.getConnection();
配置文件
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/data_test?useSSL=false&useServerPrepStmts=true
username=root
password=root
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000