Hello -
I'm having a tough time understanding how to use the ResultItator
properly. Reading the 3.0.1 Javadocs, it reports:
Result "rows", depending on the query, may be represented as scalar
values, DataRows, or Object[] arrays containing a mix of scalars and
DataRows.
In the performance tuning example, the guide shows:
// ResultIterator operations all throw checked CayenneException
try {
// special "performIteratedQuery" method is used
it = context.performIteratedQuery(q);
while(it.hasNextRow()) {
// ResultIterator always returns data rows
Map row = (Map) it.nextRow();
// do something with the row...
...
}
}
How can one pre-determine the object context being returned from a
ResultIterator.nextRow() call? My code depends on a base class applying
object-specific behavior to serialize queries to another context.. One
pass a scalar is returned; yet another pass I have a Map returned..
Tks!
Code snippet:
ResultIterator resultIter = null;
query.setPageSize(mPageSize);
query.setFetchingDataRows(true);
long rowCnt = 0;
try {
resultIter = mDataCtx.performIteratedQuery(query);
} catch (CayenneException e) {
mLogger.log(Level.FATAL, "Query failed!", e);
return;
}
boolean needHeader = true;
try {
while ( resultIter.hasNextRow() ) {
DataRow row = (DataRow)resultIter.nextRow();
rowCnt++;
if ( needHeader ) {
this.writeHeader(row, errors);
}
this.writeLine(row, errors);
}
resultIter.close();
} catch (CayenneException e) {
mLogger.log(Level.FATAL, "Iterating through query failed!", e);
return;
}
finally {
try { if ( resultIter != null ) { resultIter.close(); } } catch
(CayenneException e) { /* nothing */ }
}
}