Jdbc查询数据库处理结果集优化查询代码
来源:互联网 发布:最高人民法院网络拍卖 编辑:程序博客网 时间:2024/05/17 09:25
通过jdbc我们可以访问数据库实现对数据库的增删改查的操作,利用java的封装特写我们会发现 增加、修改、与删除可以用一个方法去实现,它们的不同之处在于sql语句不同另外接收的参数也不同,这些通过传入的参数就可以soeasy的解决掉了,今天来谈谈如何优化查询的代码,查询其实也可以向上提取出一个方法,但是查询的结果该如何处理呢,要知道每一种查询的操作的结果都不一样该怎么办呢?
本片的精髓,查询的结果都不相同不能笼统的自己处理,需要把查询的结果集返回给调用的方法去处理。
优化前的代码通过id去查与查询全部
@Overridepublic void findAll() {Student student=null;try {conn=myConn.getConnection(); //这是一个工具类用于数据库的链接与关闭操作String sql="select * from student;";ps=conn.prepareStatement(sql);rs=ps.executeQuery();while(rs.next()){student=new Student();student.setName(rs.getString("name"));student.setMath(rs.getInt("math"));student.setEnglish(rs.getInt("english"));System.out.println(student);}} catch (Exception e) {e.printStackTrace();}finally{myConn.close(rs, ps, conn);////这是一个工具类用于数据库的链接与关闭操作}}
@Overridepublic void findById(int id) {try {conn=myConn.getConnection();String sql="select * from student where id=?;";ps=conn.prepareStatement(sql);ps.setInt(1, id);rs=ps.executeQuery();if(rs.next()){Student student=new Student();student.setName(rs.getString("name"));student.setMath(rs.getInt("math"));student.setEnglish(rs.getInt("english"));System.out.println(student);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{myConn.close(rs, ps, conn);}}可以看出二者有很多的相似之处我们需要把相同的部分抽取出来如何实现
1 根据查询的结果是一个结果集ResltSet所以需要定义一个接口 添加一个方法 这个方法用于调用者自行处理
public interface ResultSetHandler { public Object doHandler(ResultSet rs) throws SQLException;}2创建模板类
public class JdbcTem{ public Object query(String sql,ResultSetHandler handler,Object...args){ try { conn=MyConnection.getConnection();//对数据库的链接操作 ps=conn.prepareStatement(sql); if(args!=null){ for (int i = 0; i < args.length; i++) {ps.setObject(i+1,args[i]);} } rs=ps.executeQuery();return handler.doHandler(rs);} catch (Exception e) {e.printStackTrace();return null;}finally{MyConnection.close(rs, ps, conn);//对数据库的关闭操作} } }上面的操作返回了一个handler的方法连同插叙的结果集一同返回给了调用者所以调用者必须要去实现具体可以用匿名内部类
操作一通过Id去查
@Overridepublic void findById(final int id) { String sql="select * from student where id=?";Person p= (Person) jdbcTem.query(sql, new ResultSetHandler(){@Overridepublic Object doHandler(ResultSet rs) throws SQLException {Person p=null;if(rs.next()){ p=new Person(); p.setEnglish(rs.getInt("english")); p.setMath(rs.getInt("math")); p.setName(rs.getString("name"));}return p;} },id); System.out.println(p);}查询全部
@Overridepublic void findAll() {String sql="select * from student;"; @SuppressWarnings("unchecked")List<Person>list=(List<Person>) jdbcTem.query(sql, new ResultSetHandler() {@Overridepublic Object doHandler(ResultSet rs) throws SQLException {List<Person>li=new ArrayList<Person>();Person p=null;while(rs.next()){p=new Person();p.setEnglish(rs.getInt("english"));p.setMath(rs.getInt("math"));p.setName(rs.getString("name"));li.add(p);}return li;}});for (Person person : list) {System.out.println(person);}}
到目前为止我们已经是简化查询的操作,上面的代码一共有2句只是第二句比较长而已。其实在项目开发中我们都会去使用第三方的组件去实现查询的操作但我们需要理解这个道理。
0 0
- Jdbc查询数据库处理结果集优化查询代码
- PostgreSQL JDBC:查询和处理结果
- JavaSE__原始的JDBC连接数据库,查询结果集
- 数据库查询处理和优化
- JAVA数据库处理(连接,数据查询,结果集返回)
- 数据库查询获取结果集
- ResultSet 结果集查询数据库
- 数据库查询不到结果集
- JDBC查询结果集字段类型整理
- jdbc 查询结果集 映射到list
- 使用JDBC查询数据库的代码
- jdbc关联模型查询-多表查询返回结果集
- 查询结果遍历处理
- pdo 查询结果处理
- 获取数据库查询结果
- 6-1数据库查询处理与优化
- 数据库系统概论-009: 关系查询处理和查询优化
- 【数据库系统概论】-关系查询处理和查询优化
- POJ1236----tarjan缩点
- C语言的输入输出-几个函数的使用比较
- 深度学习21天实战Caffe学习笔记--笔记3--caffe代码梳理
- TCP连接的三次握手
- CODEVS 1073 家族 并查集模板
- Jdbc查询数据库处理结果集优化查询代码
- **JQUERY** jQuery遍历
- 创建线程的两种方式
- 51nod 1130 阶乘长度 [Stirling公式]
- 置换 置换群 应用
- Java反射(二):反射的使用
- mysql主从复制
- hibernate debug学习总结
- 5.机器学习实战之Logistic回归