现有一批SQL语句集,此集合中的SQL语句格式不固定,但都执行的是select 查询。
要求:和数据库只建立一次连接,多次执行,每条SQL语句执行完之后都能有一个返回值。
在批量操作数据方面,java提供了批量更新,但是更新要求SQL语句格式是固定的,变的只是参数。
此问题,是一个挑战!欢迎各位献策!
挑战:java 批量查询SQL语句
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- iteye_2718 2008-08-28 14:43关注
给你提供一个dao模板方法用Object...args语法,但只限在返回一列数据
先用Object...args写一个通用的dao方法:public static List getDate(Connection conn ,String sql ,Object...args){
PreparedStatement ps = null; ResultSet rs = null; List<Object> list=new ArrayList<Object>(); try { ps = conn.prepareStatement(sql.toString(), ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); for(int i=1;i<=args.length;i++){ ps.setObject(i, args[i-1]); } rs = ps.executeQuery(); while (rs.next()) { list.add(rs.getInt(1)); } }catch(SQLException e){ e.printStackTrace(); } finally { ///自己写一个colse资源的方法吧 :) close(rs, ps); } return list; }
你在程序中可能这样调用这个方法
例:
String sql1="select intFilet from table where id=?";
getDate(sql,1);
String sql2="select intFilet from table where id=? and c=?";
getDate(sql,1,2);
有多少个"?"就在方法里放多少个参数;这种情况只能返回一个字段 :( .如果你要用返回不同的字段,要使用hibernate了,再给你提供一个
HQL的模板DAO:
protected static List executeQuery(Session ssn ,String hql, int fromIdx, int fetchCount, Object...args){Query q = ssn.createQuery(hql); for(int i=0;i<args.length;i++){ q.setParameter(i, args[i]); } if(fromIdx > 0) q.setFirstResult(fromIdx); if(fetchCount > 0) q.setMaxResults(fetchCount); return q.list(); }
关于同一个数据库链接的问题,只要用同一个Connection变量就行,如果是hibernate只要同一个session就行!
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 c程序不知道为什么得不到结果
- ¥40 复杂的限制性的商函数处理
- ¥15 程序不包含适用于入口点的静态Main方法
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置