public synchronized Object getObject(int row, int column) { if (columns == null || cursor == null) { return null; } try { Column c = columns.get(column); if (curPos == null) { cursor.reset(); cursor.moveNextRows(row + 1); } else { int diff = row + 1 - curPos; if (diff > 0) { cursor.moveNextRows(diff); } else if (diff < 0) { cursor.movePreviousRows(-diff); } } curPos = row + 1; return cursor.getCurrentRowValue(c); } catch (IOException e) { throw new RuntimeException(e); } }