Jdbc引入连接池,JdbcTemplate处理结果集的优化

本文介绍如何使用阿里Druid连接池提升JDBC性能,并实现自定义结果集处理逻辑,包括创建连接池工具类及多种结果处理器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#jdbc2笔记

  • 使用连接池,这样可以提高DAO连接数据库的性能

  • 引入一个结果集处理接口,这样可以使MyJdbcTemplate根据需求的不能,能处理不同的结果. ##引入连接池 导包 druid-1.0.9.jar
    这里使用的阿里巴巴的连接池.
    新建DruidUtil类

    public class DruidUtil { private static DataSource ds=null; static{ //获取properties对象 Properties prop=new Properties(); InputStream is=Thread.currentThread().getContextClassLoader().getResourceAsStream("dbcp.properties"); try { prop.load(is); } catch (IOException e1) { e1.printStackTrace(); } try { //通过数据源工厂获取数据源 ds=DruidDataSourceFactory.createDataSource(prop); } catch (Exception e) { e.printStackTrace(); } } //测试用返回数据源 public static DataSource getDS(){ return ds; } //返回connection对象 public static Connection getConn(){ try { return ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return null; } public static void close(Connection conn, ResultSet rs, PreparedStatement ps) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } finally { if (ps != null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } finally { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }

      			}
      		}
      	}
      }
    复制代码

    } ##引入结果集

  • 新建一个处理结果集的接口

    public interface ResultHandle{ T handle(ResultSet rs); }

  • 修改MyJdbcTemplate中的查询方法,使用结果处理器处理结果

    public static T find(String sql, ResultHandle rsh, Object... obj) { Connection conn = JdbcUtil.getConn(); PreparedStatement ps = null; T t = null; try { ps = conn.prepareStatement(sql); for (int i = 0; i < obj.length; i++) { ps.setObject(i + 1, obj[i]); } ResultSet rs = ps.executeQuery(); t = rsh.handle(rs); } catch (Exception e) { e.printStackTrace(); } finally { JdbcUtil.close(conn, ps, null); }

      return t;
    复制代码

    }

  • 实现了ResultHandle的处理结果集类
    处理list结果集

    public class BeanListHandle implements ResultHandle<List>{ private Class clazz; public BeanListHandle(Class clazz){ this.clazz=clazz; } @Override public List handle(ResultSet rs) { List list=new ArrayList(); try { while(rs.next()){ T t=clazz.newInstance(); BeanInfo beanInfo = Introspector.getBeanInfo(clazz, Object.class); PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor pd : pds) { String name = pd.getName(); Method method = pd.getWriteMethod(); method.invoke(t,rs.getObject(name)); } list.add(t);

      		}
      	} catch (Exception e) {
      		e.printStackTrace();
      	}
      	
      	return list;
      }
    复制代码

    }

处理查询数量的结果集

public class CountHandle implements ResultHandle<Long>{

	@Override
	public Long handle(ResultSet rs) {
		try {
			while(rs.next()){
				return rs.getLong(1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0L;
	}

}
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值