2012-03-30 16 views
5

Estoy utilizando Spring JdbcTemplate interfaz para recuperar datos de un MS SqlServer DB. En la documentación que veo, existe el método setMaxRows() para establecer un límite para todas las consultas, pero ¿qué sucede si quiero limitar solo una selección?Spring JdbcTemplate: ¿cómo limitar las filas seleccionadas?

¿Hay alguna manera de establecer un límite solo para una consulta invocada específica de una manera "configurable"?

+0

¿Qué hay de usar su propio PreparedStatementCreator para esas declaraciones y llamar a Statement.setMaxRows() cuando crea la declaración preparada? –

+0

@a_horse_with_no_name que parece una gran idea, ¿me puede dar algún ejemplo del uso de 'PreparedStatementCreator', soy nuevo en Spring ... – davioooh

+1

Soy nuevo en Spring, de lo contrario hubiera agregado una respuesta con un ejemplo:) –

Respuesta

2

Limitando el conjunto de resultados de una consulta específica se puede hacer poniendo el límite directamente en la consulta. Consulte la documentación de su proveedor de DB para ver si es compatible, por ejemplo, con LIMIT.

Ejemplo de MySQL: SELECT * FROM EMPLOYEE LIMIT 10

+0

O 'SELECT * FROM EMPLOYEE WHERE ROWNUM <10' en caso de Oracle. – adarshr

+0

@jabal Sí, lo sé, pero en mi implementación de método, el límite es opcional, por lo que, si tiene que limitar la consulta directamente mediante SQL, debe escribir dos consultas diferentes ... – davioooh

+0

En tales casos, normalmente creo el cadena de consulta en mi código manejando los casos "límite o sin límite" de manera diferente y luego ejecútelo. No sé una solución mejor, curioso si alguien lo hace ... :-) – jabal

4

Algunos lenguajes de consulta basada en SQL (derby) no admite LIMIT palabra clave. Entonces no puedes usar LIMIT en la consulta directamente. El uso de la primavera Plantilla JDBC que puede establecer el número máximo de filas necesarias a través setMaxRows(Integer intvalue)

jdbcTemplate.setMaxRows(1); 
1

También puede usar el límite de palabras clave en la consulta. véase más adelante la consulta

select * from FileShare limit 3 offset 3 

si en su límite de aplicación y el desplazamiento se pueden asignar dinámicamente por el usuario al utilizar por debajo de consulta

@Autowired 
private JdbcTemplate template; 

public JdbcTemplate getTemplate() { 
    return HibernateUtil.getJdbcTemplate(); 
} 

public List<FileShare> getAllSharedFiless(int limit,int offset) 
      throws ShareMeException { 
String query="select * from FileShare limit ? offset ?"; 
     return getTemplate().query(query, 
       new SharedFilesRowMapper(), 
       new Object[]{limit,offset}); 

} 

Aquí FileShare es un nombre de tabla y SharedFilesRowMapper es RowMapper qué lista de filas de la tabla.

Cuestiones relacionadas