java 使用DBUtil与C3P0设计通用查询代码

DBUtil与C3P0设计通用查询代码:

public <T> T query(String sql , ResultSetHandler<T> handler, Object ...args ){
	Connection conn = null;
	PreparedStatement ps=null;
	try {
		conn = JDBCUtil.getConn();
		ps = conn.prepareStatement(sql);
		//获取到有几个问号,占位符
		ParameterMetaData metaData  = ps.getParameterMetaData();
		int count = metaData.getParameterCount();
		for (int i = 0; i < count; i++) {
			//因为不知道是什么类型的数据,所以都使用setObject来对待。
			ps.setObject(i+1, args[i]);
		}
		
		
		
		//执行查询工作, 然后得到结果集
		ResultSet rs = ps.executeQuery();
		
		//把结果集丢给调用者,让它去封装数据 ,返回封装数据
		T t =  (T) handler.handle(rs);
		 
		return t;
		//问题一: 这里的数据获取,以及封装成上面对象返回。不知道。 因为调用的地方需要的数据不同。
		/*while(rs.next()){
			rs.getInt("id");
			rs.getString("name");
			。。。
		}*/
		
	} catch (SQLException e) {
		e.printStackTrace();
	}finally {
		JDBCUtil.release(conn, ps);
	}
	return null;
}

测试:

@Test
public void testQuery(){

	Account account = query("select * from account where id = ?" ,new A() , 3);

}

类A代码:

class A implements ResultSetHandler<Account>{

	@Override
	public Account handle(ResultSet rs) {
		try {
			Account account  = new Account();
			if(rs.next()){
				String name = rs.getString("name");
				int money = rs.getInt("money");
				
				account.setName02(name);
				account.setMoney(money);
			}
			return account;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		
		return null;
	}
}

接口ResultSetHandler代码:ResultSetHandler.java

import java.sql.ResultSet;

public interface ResultSetHandler<T> {

	/**
	 * 定义了数据封装的规则。 规范。 
	 * @param <T>
	 * @param rs
	 */
	 T handle(ResultSet rs);
	
}

连接数据库C3P0相关代码(JDBCUtil.java)见:https://blog.csdn.net/guanmao4322/article/details/89340669

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值