日期:2014-05-16  浏览次数:20563 次

请教JDBC连接oracle非常慢的原因并怎样解决返回列多的问题
请教一个我连接JDBC遇到的问题请看代码 首先数据库oracle,测试表内6列,30000行数据,字但都小于10小节
public <T>Collection<T> query(String sql,Class<T> clazz){
Connection conn=null;
PreparedStatement stat=null;
ResultSet rs=null;
Object object=null;
List<T> list=new ArrayList<T>();
try{
conn=DataModel.conn();
stat=conn.prepareStatement(sql);
rs=stat.executeQuery();
                           //取返回列
oldcolumns=getColumnNameCN(rs.getMetaData());
                           //包装class
while(rs.next()){
object=clazz.newInstance();
                                    //-----(1)-------
createClazz(object,rs);
list.add((T) object);
}
return list;
}catch(Exception e){
PringWarn(QUERY_SQL_ERROR+sql, e);
}finally{
DataModel.close(rs, stat, conn);
}
return list;
}

public void createClazz(Object object,ResultSet rs) throws Exception{
for (int i = 0; i < oldcolumns.length; i++) {
Ognl.setValue(oldcolumns[i], object, rs.getObject(oldcolumns[i]));
}
}

上面代码-----(1)--------那里可能是慢的原因,因为我测过,直接包装例
Largess largess=new Largess;
largess.setId(rs.getInt("ID"));
largess.setName(rs.getString("NAME"));
这样速度大体是3秒左右,而使用上面ognl自动包装那样却花35秒,请问这样我该怎么办,因为这个方法我想放到basedao里面,任务对象直接传sql语句和对象就可以自己包装在里面,如果使用setId之类的,我就想不出怎么通用了!