JDBC(Java Database Connectivity)是Java语言中用来连接数据库的一种API(应用程序接口)。JDBC为访问不同的数据库提供了一种统一的方式,使得Java程序可以方便地与各种数据库进行交互。通过使用JDBC,Java程序可以执行SQL语句,实现数据的查询、更新、插入和删除等操作。
JDBC的流程
- 创建工程:
- 首先,需要在开发环境中创建一个新的工程或项目,以便组织和管理即将编写的代码。
- 导入驱动jar包:
- 将MySQL的JDBC(Java Database Connectivity)驱动程序jar包导入到项目中。这个jar包是Java程序与MySQL数据库进行通信所必需的。
- 注册驱动:
- 在代码中,通过
Class.forName("com.mysql.jdbc.Driver")
方法显式地加载并注册MySQL JDBC驱动程序。注意,从JDBC 4.0开始,这一步通常是可选的,因为JDBC驱动可以自动被DriverManager发现。
- 在代码中,通过
- 获取连接:
- 使用
DriverManager.getConnection(String url, String user, String password)
方法建立与MySQL数据库的连接。这里需要提供数据库的URL、用户名和密码。
- 使用
- 定义SQL语句:
- 根据需要执行的数据库操作(如查询、更新、删除等),定义一个SQL语句,并将其存储在字符串变量中。
- 执行SQL更新语句:
- 使用连接对象(Connection)创建Statement对象或PreparedStatement对象,并调用其
executeUpdate(String sql)
方法执行SQL更新语句(如INSERT、UPDATE、DELETE)。对于查询操作,应使用executeQuery(String sql)
方法。
- 使用连接对象(Connection)创建Statement对象或PreparedStatement对象,并调用其
- 处理结果:
- 根据SQL语句的类型(更新或查询),处理执行结果。对于更新操作,通常打印出受影响的行数;对于查询操作,则需要处理返回的ResultSet对象,以获取查询结果。
public class JDBCDemo01 {
public static void main(String[] args) throws Exception{
//1.导入jar包
//2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//3.获取连接 (连接的数据库名是db2,第二个第三个参数是连接数据库的用户名密码)
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db2","root","lichee");
//4.获取执行者对象 (statement:表现,声明,跟程序意思不匹配)
Statement stat = conn.createStatement();
//5.执行sql语句,并且接收结果
String sql = "SELECT * FROM user";
ResultSet rs = stat.executeQuery(sql); //execute执行,query:查询,resultset:结果集
//6.处理结果
while(rs.next()) {
System.out.println(rs.getInt("id") + "\t" + rs.getString("name"));
}
//7.释放资源
conn.close();
stat.close();
conn.close();
}
}
JDBC API详解
-
DriverManager:用于管理数据库驱动程序的加载和数据库连接的建立。它提供了一系列静态方法来获取数据库连接、注册驱动程序等。
-
Driver:这是一个接口,由数据库厂商提供具体的实现。它封装了与数据库通信的细节,使得Java应用程序无需直接操作底层的网络通信。
-
Connection:代表与数据库的连接。通过连接对象,可以执行SQL语句、管理事务等。
-
Statement:用于执行静态SQL语句并返回执行结果。它是执行SQL语句的基础接口,但执行效率较低,且容易遭受SQL注入攻击。
-
PreparedStatement:继承自Statement接口,用于执行预编译的SQL语句。它可以有效防止SQL注入攻击,并且执行效率更高。
-
CallableStatement:继承自PreparedStatement接口,用于执行数据库中的存储过程。
-
ResultSet:用于封装SQL查询的结果集。它提供了一系列方法来遍历查询结果,并获取每一行数据的具体值。
数据库连接池
数据库连接池(Connection Pooling)是一个容器,负责分配、管理和释放数据库连接(Connection)。它允许应用程序重复使用一个现有的数据库连接,而不是每次都重新建立新的连接。这项技术通过减少连接的建立和销毁次数,显著提高了数据库操作的性能。
- 资源重用:通过复用数据库连接,减少了创建和销毁连接的开销,提高了资源利用率。
- 提升系统响应速度:由于减少了连接建立的时间,系统能够更快地响应数据库请求。
- 避免数据库连接遗漏:通过及时释放空闲时间超过最大空闲时间的数据库连接,避免了连接遗漏的问题。
配置参数
- 最大连接数:连接池能够容纳的最大数据库连接数。
- 最小连接数:连接池一直保持的最小数据库连接数。
- 初始连接数:连接池启动时创建的初始数据库连接数。
- 最大空闲连接数:没有请求时,连接池中保留的最大空闲连接数。
- 最小空闲连接数:当连接数小于此值时,连接池需要创建新的连接来补充。
- 连接超时时间:从连接池中获取连接时,如果所有连接都被占用,等待连接可用的最长时间。
运行原理
- 程序初始化时创建连接池:在应用程序启动时,根据配置创建一定数量的数据库连接,并放入连接池中。
- 使用时向连接池申请可用连接:当应用程序需要访问数据库时,向连接池申请一个可用的数据库连接。
- 使用完毕,将连接返还给连接池:数据库操作完成后,将连接返还给连接池,以供后续请求使用。
- 程序退出时,断开所有连接并释放资源:当应用程序退出时,断开连接池中的所有连接,并释放相关资源。
# 基本数据库连接配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/yourdatabase?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
spring.datasource.username=yourusername
spring.datasource.password=yourpassword
# Druid连接池配置
# 初始化时建立物理连接的个数
spring.datasource.druid.initial-size=5
# 最小空闲连接数
spring.datasource.druid.min-idle=2
# 最大活跃连接数
spring.datasource.druid.max-active=10
# 最大空闲连接数
spring.datasource.druid.max-idle=5
# 获取连接时最大等待时间,单位毫秒
spring.datasource.druid.max-wait=10000
Druid使用步骤
1. 导入jar包
首先,需要将Druid的jar包添加到项目的依赖中。通常,这个jar包会命名为类似druid-1.1.12.jar
(版本号可能会根据您使用的版本而有所不同)。您可以通过Maven、Gradle等构建工具来管理依赖,或者直接将jar包添加到项目的类路径中。
具体步骤:
- 打开您的IDE(如Eclipse, IntelliJ IDEA等)。
- 找到项目的依赖管理界面(如Maven的pom.xml文件或Gradle的build.gradle文件)。
- 添加Druid的依赖项(如果是使用Maven或Gradle)。
- 或者,将下载的
druid-x.x.x.jar
文件直接放入项目的lib目录下,并确保在项目的构建路径中包含了该lib目录。
2. 定义配置文件
接下来,需要定义一个配置文件来设置Druid连接池的参数。这些参数包括但不限于数据库的连接信息(如URL、用户名、密码)、连接池的大小(最大活跃连接数、最小空闲连接数等)、连接的初始化大小等。
具体步骤:
4. 获取数据库连接池对象
使用上一步加载的配置信息,创建Druid数据库连接池对象。
具体步骤:
最后,通过连接池对象来获取数据库连接。
- 在项目的资源目录(如src/main/resources)下创建一个配置文件,如
druid.properties
。 - 在该文件中编写配置信息,如:
url=jdbc:mysql://localhost:3306/yourdatabase username=yourusername password=yourpassword initialSize=5 maxActive=10 minIdle=2 maxWait=10000
3. 加载配置文件
在应用程序中,需要加载并解析这个配置文件,以便后续创建数据库连接池对象时可以使用其中的配置信息。
-
具体步骤:
- 使用Java的
Properties
类或Spring框架的配置文件加载机制来加载druid.properties
文件。 - 将加载的配置信息传递给Druid的连接池工厂类(如
DruidDataSourceFactory
),以便根据配置信息创建连接池对象。 - 调用Druid提供的API(可能是通过
DruidDataSourceFactory.createDataSource(properties)
等方法)来创建DruidDataSource
对象。 - 这个
DruidDataSource
对象就是您需要的数据库连接池对象。
5. 获取连接
最后,通过连接池对象来获取数据库连接。
具体步骤:
- 调用
DruidDataSource
对象的getConnection()
方法来获取数据库连接。 - 使用这个连接执行SQL语句、查询数据库等操作。
- 使用完毕后,确保关闭连接(虽然在使用连接池时,实际关闭操作可能只是将连接归还给连接池)。