浏览 1167 次
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-04
最后修改:2010-01-04
import java.sql.*; import oracle.jdbc.OracleTypes; import util.DateUtil; public class Test4PS { public static void main(String[] args) { String driver = "oracle.jdbc.OracleDriver"; String url = "XXXXXXXX"; String user = "XXXXXX"; String password = "XXXXXXXXX"; Connection conn = null; Statement stmt = null; CallableStatement cs = null; ResultSet rs = null; try { Class.forName(driver); conn = DriverManager.getConnection(url, user, password); cs = conn.prepareCall("{Call XXXXXXXXXXXXX(?,?,?,?,?,?,?,?,?)}"); cs.setInt(1, 2); cs.setInt(2, 2); cs.setInt(3, 200909); cs.setInt(4, 200910); cs.setInt(5, 0); cs.setString(6, "2"); cs.setInt(7, 1); cs.setString(8, "0"); cs.registerOutParameter(9, OracleTypes.CURSOR); cs.execute(); rs = (ResultSet) cs.getObject(9); System.out.println("测试时间开始:"); long start_time = System.currentTimeMillis(); int k = 0; while (rs.next()) {//执行第一次rs.next()时,大概使用了20多秒,而执行第二次、第三次...时,大概是0.01秒 if (k <= 100) { test.CommonTool.println(k++);// } } rs.close(); //stmt.close(); //conn.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } } ------------------------------------------------------------------------- 1.主要问题:执行rs.next的第一次大概花费了20多秒,第二次以后平均0.01秒,为什么? 2.环境:ORACLE 10.2.0.4、class12.jar(10.2.0.4) 3.曾经使用过的解决方案: 更换Driver、同类procedure对比,不同类procedure对比,oraclecachedrowset。 4.测试结果 测试结果A.:仅发生在callprocedure之后,一般查询无此问题; 测试结果B.:在执行rs.next之前,这个procedure运行时间大概2分钟,当执行其他procedure也存在部分发生该情况; 测试结果C.:更换其他版本Driver(包括ojdbc14.jar),依然存在。 由于问答无人回答,请斑竹见谅。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |