ResultSet 没有 return 所有的值
ResultSet doesn't return all the values
我正在向数据库加载 table 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 个值被 return 返回。有没有办法 return 所有 8000 个值。
JDBC 将始终将默认行数(不是整个结果集)提取到您的本地内存中。一旦到达获取行的最后一行(比如通过执行 next() 并尝试访问下一行)并且如果结果中有更多行,那么将对数据库进行另一个往返调用以获取下一行一批行到本地内存。
即使您可以设置要在本地内存中获取的行数比平时多,您也可以考虑使用 CachedRowSet。
当您在语句上设置 fetchSize() 时,您只是向 JDBC 驱动程序发出指令,您希望它应该获取多少,但 JDBC 驱动程序可以自由地忽略您的指示。我不知道 Oracle 驱动程序对 fetchSize() 做了什么。大多数时候,它观察到 MySQL JDBC 驱动程序将始终获取所有行,除非您将 fetchSize() 设置为 Integer.MIN_VALUE,但 Oracle 数据库并非如此。
我正在向数据库加载 table 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 个值被 return 返回。有没有办法 return 所有 8000 个值。
JDBC 将始终将默认行数(不是整个结果集)提取到您的本地内存中。一旦到达获取行的最后一行(比如通过执行 next() 并尝试访问下一行)并且如果结果中有更多行,那么将对数据库进行另一个往返调用以获取下一行一批行到本地内存。
即使您可以设置要在本地内存中获取的行数比平时多,您也可以考虑使用 CachedRowSet。
当您在语句上设置 fetchSize() 时,您只是向 JDBC 驱动程序发出指令,您希望它应该获取多少,但 JDBC 驱动程序可以自由地忽略您的指示。我不知道 Oracle 驱动程序对 fetchSize() 做了什么。大多数时候,它观察到 MySQL JDBC 驱动程序将始终获取所有行,除非您将 fetchSize() 设置为 Integer.MIN_VALUE,但 Oracle 数据库并非如此。