JDBC基础
—— 通过PreparedStatement执行查询操作
本章目的和提示
使用PreparedStatement实现占位符查询
本文基于第五章的代码基础上结合第六章进行更新
本章以下内容保持和第五章相同:
- 数据库结构和数据
- 项目结构
- User类
- pom.xml
- database.properties
- PropertiesUtils类
本章更新的内容:
1. JDBCUtils类
与第五章不同的是,JDBCUtils中的select()方法做了变动,其他的保持原样
所以此处代码只放出select()方法,此处先放出代码,最后再分析
/**
* 执行查询操作的方法
* @param sql
* @param path
* @return
*/
public static List<User> select(String path, String sql, Object ...args){
getConnection(path);
// 如果创建连接失败,返回null
if(con == null){
System.out.println("创建数据库连接失败");
return null;
}
List<User> userList = new ArrayList<User>();
try {
// 1. 获取PreparedStatement对象
ps = con.prepareStatement(sql);
// 2. 将可变参数循环添加至PreparedStatement对象中
for(int i=0; i<args.length; i++){
ps.setObject(i+1, args[i]);
}
// 3. 执行查询操作
rs = ps.executeQuery();
// 4. 分析ResultSet,将结果剥离出来形成对象集合
while(rs.next()){
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
user.setAge(rs.getInt("age"));
user.setRemark(rs.getString("remark"));
userList.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close();
}
return userList;
}
2. JdbcObjectService接口
接口添加一个selectUserList()方法
/**
* 查询用户列表
* @param name
* @return
*/
List<User> selectUserList(String name);
3. JdbcObjectServiceImpl接口实现类
实现类添加一个selectUserList()方法
public List<User> selectUserList(String name) {
String sql = "SELECT * FROM user WHERE name = ?";
List<User> userList = JDBCUtils.select("database.properties", sql,name);
return userList;
}
4. TestJDBC测试类
测试类添加一个测试方法
@Test
public void select() {
String name = "浅夏";
JdbcObjectService service = new JdbcObjectServiceImpl();
List<User> userList = service.selectUserList(name);
if (userList == null) {
System.out.println("用户不存在");
} else {
for (User user : userList) {
System.out.println(user.toString());
}
}
}
查询结果
执行测试方法,查出查询结果
分析
本章的代码成功的使用PrepareStatement实现查询,但却是有缺陷的。
JDBCUtils类中的那个select()中出现了User类,也就是说这个查询方法不再普适(这段代码不在适合其他类型的对象),而是只针对User类进行查询,不再是公共方法
如果我们将ResultSet的对象rs返回到接口实现类中分解,就会造成还需要在上层代码里调用close()方法,就造成了耦合的现象。
所以说这种查询方式并不完美
我们的需要的效果是什么呢?是我们调用select方法,给出我们已有的信息(参数),就能直接返回查询结果,且是以对象的形式返回,同时需要达到不能出现耦合现象。
那么我们下一章进行分析和实现
本章结束
如果本文有错误或对本文有不理解的地方欢迎评论 _
如果本文有帮助到您,可以点一下右上角的赞哦,谢谢啦