itlieying 2008-08-28 11:51
浏览 457
已采纳

挑战:java 批量查询SQL语句

现有一批SQL语句集,此集合中的SQL语句格式不固定,但都执行的是select 查询。



要求:和数据库只建立一次连接,多次执行,每条SQL语句执行完之后都能有一个返回值。



在批量操作数据方面,java提供了批量更新,但是更新要求SQL语句格式是固定的,变的只是参数。



此问题,是一个挑战!欢迎各位献策!



  • 写回答

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就行!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用