| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.server -> How to get the data from a huge table efficiently?
Hi,
I want to get the data one by one from a huge table(about 3 thousand
rows) efficiently, this is my way as below:
//--------------------------------------------------------------------------
int queryEachTime = 1000;
int queryFrequency = 5000;
Connection conn = null;
try {
while(true) {
if(conn == null){
// "dbPool" is a connection pool
conn = dbPool.getConnection();
}
CallableStatement qstmt = conn.prepareCall(sql,
ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
String sql = "SELECT ROWNUM, id, name, read " +
"FROM member " +
"WHERE age > 20 AND ROWNUM<=" + queryEachTime + "";
Statement qstmt =
ResultSet rs = qstmt.executeQuery(sql);
// If have new data
boolean haveData = false;
// put the data into memory
Vector v = new Vector();
while (rs.next()) {
RequestBean rb = new RequestBean();
// get data
rb.setId(rs.getBigDecimal("id"));
rb.setName(rs.getBoolean("name"));
// 放到内存中
v.addElement(rb);
// update row
rs.updateInt("read_stat", 1);
rs.updateRow();
haveData = true;
}
// close
rs.close();
rs = null;
qstmt.close();
qstmt = null;
// release connection
conn.close();
conn = null;
for(int i = 0; i < v.size(); i ++){
RequestBean rb = (RequestBean)v.get(i);
// do something
}
v.clear();
/* Have finished! */
if(!haveData) {
if(LOG.isDebugEnabled())
LOG.debug("Finished!");
}
/* Frequency */
try {
Thread.sleep(queryFrequency);
} catch (InterruptedException e) {
}
}
} catch (ProxoolException e) {
LOG.error("",e);
} catch (SQLException e) {
LOG.error("",e);
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
}
conn = null;
//--------------------------------------------------------------------------
But when the application run for a while, It will get the OutOfMemoryException. Any ideas? Thanks. Received on Fri Jun 02 2006 - 19:40:28 CDT
![]() |
![]() |