Limitar el número de registros devueltos en un SELECT desde JDBC

June 11, 2007

En ocasiones es necesario limitar el número de registros obtenidos mediante una consulta SQL. El problema es que no hay un modo estándar de hacer esto con SQL. Por normal general hay que recurrir a alguna extensión propia de cada SGBD.

Así, por ejemplo, en Oracle se emplea la pseudo columna rownum.

select * from MI_TABLA where rownum<=10;

En SQL Server, se usa la cláusula especial top.

select top 10 * from MI_TABLA;

En MySQL, existe la cláusula limit.

select * from MI_TABLA limit 10;

Pero, ¿y si necesitas una solución independiente de la base de datos?

Entonces no te queda otra que recurrir a JDBC y usar el método setMaxRows del interface java.sql.Statement. Veámoslo!

//Creamos una sentencia SQL
Statement select = conexion.createStatement();
//Limita el número de registros a devolver por la SELECT
select.setMaxRows(10);
//Ejecutamos el select
ResultSet resultadoSelect = select.executeQuery("select * from MI_TABLA" );

Si quieres usar un PreparedStatement no hay problema. Es el mismo método. Recuerda que PreparedStatement es un interface hijo de Statement. Veámoslo también.

//Creamos un preparedStatement
PreparedStatement pSelect = conexión.prepareStatement("select * from MI_TABLA where MI_CAMPO=?");
//Indicamos el parametro del select (pej un String)
pSelect.setString(1, "MI_VALOR");
//Limita el número de registros a devolver por la SELECT
pSelect.setMaxRows(10);
//Ejecutamos el select
ResultSet resultadoSelect = pSelect.executeQuery();

Es posible que esta solución sea menos eficiente que la solución nativa del SGBD. Pero eso ya depende del driver JDBC…

Comments »

The URI to TrackBack this entry is: http://jcesarperez.blogsome.com/2007/06/11/limitar-el-numero-de-registros-devueltos-en-un-select-desde-jdbc/trackback/

No comments yet.

RSS feed for comments on this post.

Leave a comment

Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>



Anti-spam measure: please retype the above text into the box provided.


Captcha anti-spam