如何分析JDBC操作问题?

知识是无尽的海洋,只有勇敢的探索者才能发现其深邃之美

 

一、分析原始 JDBC 操作问题

 

JDBC 规定了 java 应用应该如何连接和操作数据库,它是规范,而非实现,具体的实现由不同的数据库厂商提供。对我们来说,JDBC 有效地将我们的代码和具体的数据库实现解耦合,这是非常有好处的,例如,当我的数据库从 mysql 切换到 oracle 时,几乎不需要调整代码。代码示例:

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", "root");
// 定义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. Sql语句在代码里进行硬编码,造成代码不容易维护,实际应用中sql变化的可能较大,sql变动需要改变java代码。
  3. 使用preparedStatement向有占位符号参数存在着硬编码,因sql语句的where条件不确定,可能多也有可能少,修改sql的同时还要修改代码,系统不易维护。
  4. 针对结果集解析存在硬编码,sql的变化导致解析代码的变化,系统不易维护,若能将数据库的记录封装成pojo对象解析比较方便。

针对问题提供解决思路

 

  1. 使用数据库连接池初始化连接资源信息。
  2. 将sql语句抽取到xml配置文件中
  3. 使用反射、内省等底层技术,自动将实体与表进行属性与字体之间的自动映射。
posted @ 2024-06-28 11:33  怀念-2018  阅读(12)  评论(0编辑  收藏  举报