挑战:java 批量查询SQL语句

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



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



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



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



给你提供一个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就行!

http://www.iteye.com/topic/230738这个不知道行不行?

sql大家可以看看这希望对大家有所帮助[url]http://javaee.3g-edu.org?lbjeye[/url]在java技术学习以及java教程里都有资料 完整的跟在线客服申请免费VIP资料