我使用帶存儲過程的CallableStatement讀取數據,ResultSet有12000行,處理時間爲30秒。我已經嘗試設置獲取大小(rs.setFetchSize(500),但儘管如此,它走的是同一時間獲取整個數據(30秒)。JDBC ResultSet方法next()花費30秒來獲取12000行
callableStatement = conn.prepareCall(myProc);
callableStatement.setString("myParam", xyz);
callableStatement.registeroutputParameter("REVTAL", OracleTypes.CURSOR);
callableStatement .setFetchSize(1000); // I have tried with different values
rs = (ResultSet) callableStatement.getObject("REVTAL");
while(rs.next()) {`
myMethodToSetResultIntoList();
}
是否有任何可能的方式以外提取大小優化?它
我已經試過這樣:
while(rs.next()) {`
logger(); // do nothing
}
它處理了12000行中大約3秒,所以時間是從的resultSet獲取數據得到消耗
而且,這我。確認setfetchSize()工作正常,因爲沒有設置fetch Size,它將「fetchedRowCount」顯示爲10,並將setFetchSize()顯示爲x,它在調試模式下顯示「fetchRowCount」爲x。
實際while循環是這樣的:
while(rs.next()) {
Myclass mc = new Myclass();
mc.setA(rs.getString("parameterA");
mc.setB(String.valueOf(rs.getLong("parameterB");
//4 more string parameters same
mc.setG(myMethodToConvertDate(rs.getDate("Date");
myList.add(mc);
}
所以它走大約25秒檢索ResultSet中的數據,並補充說,到myList中。必須有解決方案。
在此先感謝
我想你只有一個返回值,即'CURSOR'。所以'setFetchSize()'不會有任何效果,因爲它只加載一行......嘗試類似'SELECT * FROM「myProc」(?)' –
[使用JDBC for Oracle迭代ResultSet需要大約16秒的時間?](https://stackoverflow.com/questions/17744090/iterating -a-resultset-using-the-jdbc-for-oracle-take-a-lot-of-time-about-16s) – phaze0
我認爲setFetchSize()工作正常,我已經嘗試調試我的代碼,並在rowCount它實際上是顯示我在setFetchSize()中設置的數字。 –