我正在开发一些涉及Oracle数据库的Java开发。我已经能够成功连接并从数据库中提取一些数据,但是,当我尝试使用一个查询时,我会得到一个空的ResultSet来获取数据的子部分。
HashMap<String, String> tableSchema = getTableSchema(connection, tableName);
Map.Entry<String, String> entry = tableSchema.entrySet().iterator().next();
int rows = (getTableRowCount(connection, tableName));
for(int i = 0; i < rows; i+= 500){
String query = "SELECT * FROM (SELECT a.*, row_number() OVER (ORDER BY " + entry.getKey() + ") rn FROM " + tableName + " a) WHERE rn > " + i + " and rn < " + (i+500) + ";";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
if(rs == null){
// Always the case
}
}
如果我执行的查询只是
query = "SELECT * FROM " + tableName;
resultSet充满了数据。我还获取了构造查询字符串的结果(通过println)并将其粘贴到Oracle SQL Developer中,并在其中生成了结果。
所以我想这会提出一些问题并回答任何可能解决问题的问题。有没有更好的方法来迭代Java中的Oracle数据库表(其中一些表太大,所以我不能将它们批量加载到内存中)而不是这个查询?我可以使用不同类型的查询吗?当SQL Developer中的相同查询有效时,是否有任何已知原因会返回null?