2010-11-25 39 views
7

Actualmente estoy trabajando en un proyecto de migración, para migrar datos del antiguo archivo base al nuevo (no pregunte por qué estoy utilizando una aplicación Java para esto, es lo que el cliente requiere)consultas paginado con JdbcTemplate

Hubo un código inicial que estoy actualizando ahora. Una de las cosas que estoy cambiando es usar Spring's JdbcTemplate en lugar del código de la placa de calderas que estaba allí.

Por desgracia, no he encontrado una forma todavía para ejecutar consultas paginados en una JdbcTemplate, análogo al antiguo código:

Statement statement = getConnection().createStatement(
    ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); 
statement.setFetchDirection(ResultSet.FETCH_FORWARD); 
statement.setFetchSize(1000); 
return statement.executeQuery(); 

El getConnection() acaba de devolver un objeto Connection, creada en código JDBC simple (que es no es parte de un SessionFactory o una implementación de framework).

Rastreé sobre el conjunto de resultados, mapeando las filas de a una por vez. ¿Alguien sabe si hay una manera fácil de lograr la misma funcionalidad con JdbcTemplate?

TIA

+0

* no preguntes por qué estoy utilizando una aplicación Java para esto, es lo que necesita el cliente *. También es una buena idea. –

+0

¿Podrías profundizar en esto por favor? – thomaux

+0

Básicamente: tenía Spring Batch en mente. Mucho de lo que hace: procesamiento de fragmentos, gestión de transacciones, restartabilidad, etc. no sería posible con solo SQL. –

Respuesta

1

¿Te refieres a sth. ¿Me gusta esto?

SimpleJdbcTemplate template = new SimpleJdbcTemplate(dataSource); 

List<String> result = template.query("SELECT name FROM people WHERE id > ?", 
    new RowMapper<String>() { 

     public String mapRow(ResultSet rs, int rowNum) throws SQLException { 
      return rs.getString("name"); 
     } 

    }, 666 
); 

O esto:

template.getJdbcOperations().query("SELECT name FROM people WHERE id > ?", 
     new Object[] { 666 }, 
     new RowCallbackHandler() { 

      public void processRow(ResultSet rs) throws SQLException { 
       System.out.println(String.format(
        "Got '%s'", rs.getString("name"))); 
      } 

     } 
); 
+0

No exactamente, esto devolverá y correlacionará todos los registros con id mayor que 666. Necesito una solución que devuelva un registro a la vez y lo asigne. ¡Gracias por su respuesta! – thomaux

Cuestiones relacionadas