我正在加载到数据库表8000关于用户的记录,我正在对该数据进行一些操作,最后我想收回我的8000条记录。我的代码:
public void getBalance(String database){
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection(
"jdbc:oracle:thin:@address","user","password");
stmt=conn.createStatement();
rs=stmt.executeQuery("select count(*) from balance1");
int count=0;
while(rs.next()){
count=rs.getInt(1);
}
System.out.println("The count is "+count);
conn.setAutoCommit(false);
stmt.setFetchSize(count);
rs = stmt.executeQuery("select * from balanceview");
writeToAFile(rs);
}catch(Exception e){
e.printStackTrace();
}finally{
if(conn!=null){
try{
conn.close();
}catch(Exception e){
_logger.severe(e.getMessage());
e.printStackTrace();
}
}if(stmt!=null){
try{
stmt.close();
}catch(Exception e){
_logger.severe(e.getMessage());
e.printStackTrace();
}
}if(rs!=null){
try{
rs.close();
}catch(Exception e){
_logger.severe(e.getMessage());
e.printStackTrace();
}
}
}
}
但我遇到的问题只返回2000个值。有没有办法返回所有8000个值。
答案 0 :(得分:0)
JDBC将始终将默认行数(而不是整个结果集)提取到本地内存。一旦到达获取行的最后一行(比如通过执行next()并尝试访问下一行),如果结果中有更多行,则将对数据库进行另一次往返调用以获取下一行批量行到本地内存。
即使您可以设置要在本地内存中获取的行数,也可以考虑使用CachedRowSet。
当你在Statement上设置fetchSize()时,你只是给JDBC驱动程序一个指令,你应该提取多少,但JDBC驱动程序可以忽略你的指令。我不知道Oracle驱动程序对fetchSize()的作用。大多数情况下,它观察到MySQL JDBC驱动程序将始终获取所有行,除非您将fetchSize()设置为Integer.MIN_VALUE,但Oracle数据库不是这种情况。