JDBC操作
public class Demo {
public static void main(String[] args) {
// 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 获取数据库连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?characterEncoding=utf-8", "root", "123456");
// 定义sql语句
String sql = "select * from user where username = ?";
// 获取预处理statement
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 设置参数
preparedStatement.setString(1, "tom");
// 获取结果集
ResultSet resultSet = preparedStatement.executeQuery();
// 遍历结果集
while (resultSet.next()) {
User user = new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
System.out.println(user);
}
}
}
存在的问题
- 数据库频繁创建连接、释放资源造成系统资源浪费,从而影响系统性能。
- sql语句在代码中硬编码,造成代码不易维护,实际应用中sql变化的可能较大,sql变动需要改变java代码。
- 使用preparedStatement向占位符传参数存在硬编码,因为sql语句的where条件会变化,修改sql还要改代码,系统不易维护。
- 对结果集解析存在硬编码,sql变化导致解析代码变化,系统不易维护,如果能将数据库记录封闭成pojo对象比较方便。
解决方法
- 数据库频繁创建、释放资源:使用连接池
- sql语句和参数硬编码:使用配置文件
- 手动解析封装返回结果集:使用反射、内省