环境:
IDEA 2021.2.2
Mysql 8.0.26
Java 11
Maven (idea 自带)
首先在 pom.xml 中引入 mysql 驱动
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
数据库中建一个 User 表并造一些数据
User 类的定义和数据库中一致
@Data
public class User {
private Long id;
private String username;
private Long age;
}
接下来是主代码,用传统 JDBC 来连接数据库
/**
* 传统 JDBC 方法连接数据库
*/
public class JDBC {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
User user = new User();
try {
/* 加载数据库驱动 */
Class.forName("com.mysql.cj.jdbc.Driver");
/* 通过驱动管理类获得数据库链接 */
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo?characterEncoding=utf-8&serverTimezone=UTC", "root", "root");
/* 定义 sql 语句,符号 ? 表示占位符 */
String sql = "select * from user where username = ?";
/* 获取预处理 statement */
preparedStatement = connection.prepareStatement(sql);
/* 设置参数,第一个参数为 sql 语句中参数的序号,(从 1 开始),第二个参数是设置的参数值 */
preparedStatement.setString(1, "张三");
/* 向数据库中发出 sql 执行查询,查询出结果集 */
resultSet = preparedStatement.executeQuery();
/* 遍历查询结果集 */
while (resultSet.next()) {
Long id = resultSet.getLong("id");
String username = resultSet.getString("username");
Long age = resultSet.getLong("age");
user.setId(id);
user.setAge(age);
user.setUsername(username);
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (resultSet != null) {
try {
resultSet.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
输出:
分析一下传统 JDBC 的缺点:
1 加载驱动、编写 sql 语句均存在硬编码问题,并且需要手动封装返回结果。
2 每查询一次都要连接和释放数据库,造成资源浪费,影响系统性能。
初步解决思路:
1 使用配置文件。
2 使用连接池。