parametros example ejemplo descargar create consultas con java jdbc

example - jdbc java descargar



Java ResultSet cómo comprobar si hay resultados (21)

Resultset no tiene método para hasNext. Quiero comprobar si el resultado tiene algún valor

es esta la manera correcta

if (!resultSet.next() ) { System.out.println("no data"); }


¿Por qué no usar rs.getRow ()?

int getRow() throws SQLException Retrieves the current row number. The first row is number 1, the second number 2, and so on. Note:Support for the getRow method is optional for ResultSets with a result set type of TYPE_FORWARD_ONLY Returns: the current row number; 0 if there is no current row Throws: SQLException - if a database access error occurs or this method is called on a closed result set SQLFeatureNotSupportedException - if the JDBC driver does not support this method Since: 1.2

Para mí, compruebe que "if (rs.getRow ()! = 0)" parece funcionar bien.


Al usar resultSet.next () puede obtener fácilmente el resultado, ya sea que resultSet contenga cualquier valor o no

ResultSet resultSet = preparedStatement.executeQuery(); if(resultSet.next()) //resultSet contain some values else // empty resultSet


Creé el siguiente método para verificar si un ResultSet está vacío.

public static boolean resultSetIsEmpty(ResultSet rs){ try { // We point the last row rs.last(); int rsRows=rs.getRow(); // get last row number if (rsRows == 0) { return true; } // It is necessary to back to top the pointer, so we can see all rows in our ResultSet object. rs.beforeFirst(); return false; }catch(SQLException ex){ return true; } }

Es muy importante tener las siguientes consideraciones:

El objeto CallableStatement debe configurarse para permitir que el objeto ResultSet vaya al final y regrese a la parte superior.

TYPE_SCROLL_SENSITIVE : El objeto ResultSet puede cambiar al final y volver al principio. Además puede captar los últimos cambios.

CONCUR_READ_ONLY : Podemos leer los datos del objeto ResultSet, pero no podemos actualizarlos.

CallableStatement proc = dbconex.prepareCall(select, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);


Creo que la forma más fácil de verificar el conjunto de resultados es a través de CollectionUtils en el paquete org.apache.commons.collections.CollectionUtils

if(CollectionUtils.isNotEmpty(resultList)){ /** * do some stuff */ }

Esto comprobará la condición de conjunto de resultados nulos y vacíos.

Para más información detallada puede consultar el siguiente documento. CollectionUtils


Es mejor utilizar ResultSet.next () junto con la sintaxis do {...} while () para esto.

La llamada "Verificar los resultados" ResultSet.next () mueve el cursor a la primera fila, así que use la sintaxis do {...} while () para procesar esa fila mientras continúa procesando las filas restantes devueltas por el bucle.

De esta manera, puede comprobar los resultados y, al mismo tiempo, procesar los resultados devueltos.

if(resultSet.next()) { // Checks for any results and moves cursor to first row, do { // Use ''do...while'' to process the first row, while continuing to process remaining rows } while (resultSet.next()); }


Eso es correcto, inicialmente el cursor del ResultSet apunta hacia la primera fila, si la primera llamada a next() devuelve false entonces no hubo datos en el ResultSet .

Si usa este método, es posible que tenga que llamar a beforeFirst() inmediatamente después para restablecerlo, ya que ahora se ha colocado más allá de la primera fila.

Cabe señalar, sin embargo, que la respuesta de Seifer a continuación es una solución más elegante para esta pregunta.


Eso funcionaría si desea ver si hay alguna fila en el conjunto de resultados que sí.

Tenga en cuenta que next() siempre se mueve a la siguiente fila, así que si planea hacer alguna lectura del conjunto de resultados, debe tenerlo en cuenta.

El uso habitual con ResultSet (cuando simplemente se lee) es:

while (resultSet.next()) { ... read from the row here ... }

Lo que obviamente no funcionará correctamente si invocó next() una vez para verificar si el conjunto de resultados estaba vacío, así que tenga cuidado. Aunque hay métodos para "hacer copias de seguridad", no son compatibles con todos los tipos de conjuntos de resultados.


Esta es una pieza de lectura práctica y fácil, creo.

if (!resultSet.isAfterLast() ) { System.out.println("No data"); }


He estado intentando establecer la fila actual en el primer índice (que trata con las claves primarias). Yo sugeriría

if(rs.absolute(1)){ System.out.println("We have data"); } else { System.out.println("No data"); }

Cuando se llena el ResultSet, apunta a antes de la primera fila. Al configurarlo en la primera fila (indicado por rs.absolute(1) ), devolverá verdadero, lo que indica que se colocó correctamente en la fila 1, o falso si la fila no existe. Podemos extrapolar esto a

for(int i=1; rs.absolute(i); i++){ //Code }

que establece la fila actual en la posición i y fallará si la fila no existe. Este es solo un método alternativo para

while(rs.next()){ //Code }


Inicialmente, el objeto del conjunto de resultados (rs) apunta al BFR (antes del primer registro). Una vez que usamos rs.next (), el cursor apunta al primer registro y rs contiene "true". Usando el bucle while puedes imprimir todos los registros de la tabla. Una vez recuperados todos los registros, el cursor se mueve a ALR (Después del último registro) y se establecerá en nulo. Consideremos que hay 2 registros en la tabla.

if(rs.next()==false){ // there are no records found } while (rs.next()==true){ // print all the records of the table }

En pocas palabras, también podemos escribir la condición como while (rs.next ()).


Lo mejor que puede hacer es verificar la primera fila para que, cuando tenga la intención de obtener los datos, pueda evitar el error de saltar una fila. Algo como: if (! ResultSet.first ()) {System.out.println ("no data"); }


Normalmente harías algo como esto:

while ( resultSet.next() ) { // Read the next item resultSet.getString("columnName"); }

Si desea informar un conjunto vacío, agregue una variable contando los elementos leídos. Si solo necesita leer un solo elemento, entonces su código es adecuado.


Para estar completamente seguro de que el conjunto de resultados está vacío o no, independientemente de la posición del cursor, haría algo como esto:

public static boolean isMyResultSetEmpty(ResultSet rs) throws SQLException { return (!rs.isBeforeFirst() && rs.getRow() == 0); }

Esta función devolverá verdadero si ResultSet está vacío, falso si no, o lanzará una SQLException si ese ResultSet está cerrado / no inicializado.


Según la respuesta más viable, la sugerencia es usar "isBeforeFirst ()". Esa no es la mejor solución si no tiene un "tipo de solo reenvío" .

Hay un método llamado " .first() ". Es menos excesivo obtener el mismo resultado exacto. Verifica si hay algo en tu "conjunto de resultados" y no avanzas el cursor.

La documentación indica: "(...) false si no hay filas en el conjunto de resultados ".

if(rs.first()){ //do stuff }

También puede simplemente llamar a isBeforeFirst () para probar si hay filas devueltas sin avanzar el cursor, luego proceda normalmente. - SnakeDoc 2 de septiembre de 14 a las 19:00

Sin embargo, hay una diferencia entre "isBeforeFirst ()" y "first ()". Primero genera una excepción si se hace en un conjunto de resultados del tipo "solo hacia adelante".

Compare las dos secciones de lanzamiento: http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#isBeforeFirst() .first()

De acuerdo, básicamente, esto significa que debes usar "isBeforeFirst" siempre que tengas un tipo "solo de reenvío". De lo contrario, es menos excesivo utilizar "first ()".


Suponiendo que está trabajando con un ResultSet recién devuelto cuyo cursor apunta antes de la primera fila, una forma más fácil de verificar esto es simplemente llamar a isBeforeFirst() . Esto evita tener que realizar un seguimiento si se deben leer los datos.

Como se explica en la documentación , esto devuelve falso si el cursor no está antes del primer registro o si no hay filas en el ResultSet .

if (!resultSet.isBeforeFirst() ) { System.out.println("No data"); }


puedes hacer algo como esto

boolean found = false; while ( resultSet.next() ) { found = true; resultSet.getString("column_name"); } if (!found) System.out.println("No Data");


siempre se puede hacer el siguiente por adelantado, y solo hacer una comprobación de bucle posterior

if (!resultSet.next() ) { System.out.println("no data"); } else { do { //statement(s) } while (resultSet.next()); }


if (res.next()) { do { // successfully in. do the right things. } while (res.next()); } else { // no results back. warn the user. }

isAfterLast() también devuelve falso para el conjunto de resultados vacío, pero como el cursor está antes de la primera fila, este método parece más claro.


ResultSet result = stmt.executeQuery(sqlQuery); if (!result.next()) status = "ERROR"; else status = "SUCCESS";


ResultSet rs = rs.executeQuery(); if(rs.next()) { rs = rs.executeQuery(); while(rs.next()) { //do code part } } else { //else if no result set }

Es mejor volver a ejecutar la consulta porque cuando llamamos a if(rs.next()){....} se ejecutará la primera fila de ResultSet y luego se ejecutará dentro de while(rs.next()){....} Obtendremos el resultado de la siguiente línea. Así que creo que la re-ejecución de la consulta dentro de if es la mejor opción.


if(resultSet.first) { } else { system.out.println("No raw or resultSet is empty"); }

Porque si ResultSet no tiene en bruto, entonces resultSet.first devuelve false.