在Oracle(9.0.1)先将要处理的数据(1000条以上)插入临时表,然后再调用一存储过程对这批数据进行集中处理,并返回处理信息,此存储过程在PL/SQL环境相同数据量下测试执行时间为10秒左右,但是通过CallableStatement去执行需要130秒左右(即调用executeQuery()后消耗的时间),经过测试,存储过程执行完成的时间也在10秒左右,但是在执行完返回的过程中消耗上百秒,如果去除返回值,也还需要50秒左右,百思不得其解,不知是否与驱动程序有关?(驱动为oracle的classes12.zip)
解决方案 »
- 我在配置jdk运行javac一直提示找不到或无法加载主类
- Java 集合赋值问题!
- 求助:关于Java finalize方法的用法(有关垃圾回收的)
- jfreechart 在画3d柱状图的时候如何获得LayeredBarRenderer 对象
- 什么打印出来的结果是这个呢?
- jasperreport的分组报表问题!请高手解答,谢谢!
- 帮忙看看数组问题
- jdbc getPrimaryKeys()方法得不到主键集合
- 关于float变量
- 那里有java版的《《数据结构》》电子书,100分感谢
- 帮忙看一下我在SWT中应用Timer类的程序,那出问题了!
- 当有很多packages和其他jar文件时候,如何制作jar文件?
public Object execute() throws SQLException {
List results = null;
String plsql = getPLSQL(plsqlName, params);
LogHelper.logger.info("executeStatement: " + plsql);
Connection cn = null;
CallableStatement cs = null;
try {
cn = getConnection();
cs = cn.prepareCall(plsql);
setParamToStatement(cs, params,true);
cs.execute();//1000条数据,就这个调用需要130S,在PL/SQL下测试相同数据量,只要10S
results = parseStatement(cs, params);
} finally {
closeCallable(cs, cn);
}
return results;
public List executeCallable(final String plsqlName, final Object[] params) {
return (List) new DataAccssesExecuteTemplet().run(new ITemplet() {
public Object execute() throws SQLException {
List results = null;
String plsql = getPLSQL(plsqlName, params);
LogHelper.logger.info("executeStatement: " + plsql);
Connection cn = null;
CallableStatement cs = null;
try {
cn = getConnection();
cs = cn.prepareCall(plsql);
setParamToStatement(cs, params,true); cs.execute();//1000条数据,就这个调用需要130S,在PL/SQL下测试相同数据量,只要10S
results = parseStatement(cs, params);
} finally {
closeCallable(cs, cn);
}
return results;
} private String getPLSQL(String plsqlName, Object[] params) {
StringBuffer parameters = new StringBuffer();
boolean hashReturnValue = true;
if((params[0]+"").startsWith("OracleTypes")){
parameters.append("{ ? = call " + plsqlName + "("); }else{
parameters.append("{ call " + plsqlName + "(");
hashReturnValue = false;
}
for (int i = 0; i < params.length; i++) {
parameters.append("?,");
}
if(parameters.length()>3 && hashReturnValue)
parameters.delete(parameters.length()-3,parameters.length());
else
parameters.delete(parameters.length()-1,parameters.length());
parameters.append(") }");
return parameters.toString();
} // 执行SQL语句并返回一个List封装的多个返回参数集
private List parseStatement(CallableStatement cs, Object[] params)throws SQLException {
ArrayList list = new ArrayList();
for (int i = 0; i < params.length; i++) {
String value = params[i] + "";
if (value.startsWith("OracleTypes")) {
if ("OracleTypes.CURSOR".equals(value)) {
ResultSet rs = (ResultSet) cs.getObject(i + 1);
list.add(covered(rs));
closeAll(rs, null, null);
} else {
list.add(cs.getObject(i + 1));
}
}
}
return list;
}
});
}