文章目录
- (一)jdbc查询代码
- (二)JDBC存在的问题:
- (三)解决方案:
(一)jdbc查询代码
下面这段jdbc查询的代码,想必每个学过javaweb的同学,都是经历过的。
代码语言:javascript复制public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
// 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 通过驱动管理类获取数据库链接
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "123456");
// 定义sql语句?表示占位符
String sql = "select * from user where username = ?";
// 获取预处理statement
preparedStatement = connection.prepareStatement(sql);
// 设置参数,第⼀个参数为sql语句中参数的序号(从1开始),第⼆个参数为设置的参数值
preparedStatement.setString(1, "tom");
// 向数据库发出sql执⾏查询,查询出结果集
resultSet = preparedStatement.executeQuery();
// 遍历查询结果集
while (resultSet.next()) {
int id = resultSet.getInt("id");
String username = resultSet.getString("username");
// 封装User
user.setId(id);
user.setUsername(username);
}
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 释放资源
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
} }
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
通过上面这段再熟悉不过的jdbc代码,可以看到,使用再多的jdbc对数据库做操作的时候,无非就这么几个步骤:
- 1、加载数据库驱动;
- 2、通过驱动管理类获取数据链接;
- 3、自定义sql语句;
- 4、拿到sql语句,并执行;
- 5、拿到执行结果。
(二)JDBC存在的问题:
- 1、数据库配置信息、sql执行语句等,写死在Java代码中(存在硬编码,不方便后期维护);
- 2、每一次执行sql都会创建一个链接,并释放(浪费资源);
- 3、对最终执行的结果需要手动的去封装返回结果集,较为繁琐。
(三)解决方案:
- 1、使用配置文件加载配置信息;
- 2、使用连接池,资源不用了就放回去,等待下一个使用的人;
- 3、可以使用反射,对表的字段和Java实体类的属性做自动映射。
- 4、使用其他持久层框架,例如:Mybatis