eclipse中用jdbc调用oracle10g rac 一个java存储过程,执行时间越来越慢,求解 本帖最后由 huangjingxun 于 2011-04-14 14:18:09 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 问题就是存储过程只有短短的几句话,我也发出来了,实在不知道还能怎么优化了,用PLSQL来反复跑存储过程没有出现越来越慢的情况,但用JDBC就会越来越慢。我把调用存储过程的接口发出来大家看看吧,就这么简单的几句:public void execProcedure() { try { statement = odb.getConnection().prepareCall(sql); if (null == statement) System.exit(-1); statement.setString(1, dataType); statement.setInt(2, serverType); statement.setInt(3, syncMode); statement.setString(4, userServerIP); statement.setInt(5, userServerPort); statement.setString(6, userServerName); statement.setString(7, userServerPassword); statement.setString(8, filePathName); statement.setString(9, fileName); statement.setInt(10, fileLength); statement.setString(11, device); statement.setTimestamp(12, newjava.sql.Timestamp(System.currentTimeMillis())); statement.setString(13, enteruser); statement.setString(14, note); statement.setString(15, index1); statement.setString(16, index2); statement.setString(17, index3); statement.setString(18, index4); statement.setString(19, fileGroup); statement.setString(20, fileGroupId); statement.registerOutParameter(21, java.sql.Types.NUMERIC); statement.registerOutParameter(22, java.sql.Types.VARCHAR); long Time = System.currentTimeMillis(); statement.execute(); System.out.print(new DecimalFormat("0.000").format((double) (System .currentTimeMillis() - Time) / 1000) + " "); ret = statement.getInt(21); jobID = statement.getString(22); } catch (SQLException e) { // TODO: handle exception e.printStackTrace(); } finally { if (statement != null) try { statement.close(); statement = null; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 哦,还要补充下,不管是跑1次存储过程,新创建一个statement;还是用一个statement一直跑,都会越来越慢,真是困惑了。我猜想难道JDBC驱动有BUG? 经过大量测试,发现是用了oracle10G RAC就有这情况,不用RAC一切正常,不知可有难兄难弟? 关于表空间迁移,表空间建在磁盘组里面,怎么进行迁移 急:ORALCE漏洞请高手鉴定。 ORACLE从9201升级到9208问题 如何根据名称获取变量值 XMLDOM.IMPORTNODE 和XMLDOM.APPENDCHILD函数的应用 关于oracle9i分区问题 请大家推荐ORACLE好书 select 表中 随机某行的 某些列 的问题 Oracle数据库计算的问题 监听问题怎么解决? oracle 数据库case when语句用法 loadrunner测试oracle11g性能时 录制 脚本为空
我把调用存储过程的接口发出来大家看看吧,就这么简单的几句:
public void execProcedure() { try {
statement = odb.getConnection().prepareCall(sql); if (null == statement)
System.exit(-1); statement.setString(1, dataType);
statement.setInt(2, serverType);
statement.setInt(3, syncMode);
statement.setString(4, userServerIP);
statement.setInt(5, userServerPort);
statement.setString(6, userServerName);
statement.setString(7, userServerPassword);
statement.setString(8, filePathName);
statement.setString(9, fileName);
statement.setInt(10, fileLength);
statement.setString(11, device);
statement.setTimestamp(12, new
java.sql.Timestamp(System.currentTimeMillis()));
statement.setString(13, enteruser);
statement.setString(14, note);
statement.setString(15, index1);
statement.setString(16, index2);
statement.setString(17, index3);
statement.setString(18, index4);
statement.setString(19, fileGroup);
statement.setString(20, fileGroupId);
statement.registerOutParameter(21, java.sql.Types.NUMERIC);
statement.registerOutParameter(22, java.sql.Types.VARCHAR);
long Time = System.currentTimeMillis();
statement.execute();
System.out.print(new DecimalFormat("0.000").format((double) (System
.currentTimeMillis() - Time) / 1000)
+ " ");
ret = statement.getInt(21);
jobID = statement.getString(22);
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
} finally {
if (statement != null)
try {
statement.close();
statement = null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}