我正在向数据库表加载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个值
JDBC将始终将默认行数(而不是整个结果集)获取到本地内存中。一旦到达所取行的最后一行(例如通过执行next()并尝试访问下一行),如果结果中有更多行,则将对数据库进行另一次往返调用,以从本地内存中获取下一批行。
即使你可以设置在本地内存中获取的行数,你也可以考虑使用CachedRowSet。
当您在语句上设置fetchSize()时,您只是向JDBC驱动程序提供了您希望它应该获取多少的指令,但是JDBC驱动程序可以自由地忽略您的指令。我不知道Oracle驱动程序对fetchSize()做了什么。大多数情况下,MySQL JDBC驱动程序将始终获取所有行,除非您将fetchSize()设置为Integer。