es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

ResultSet.getRow() muestra el número de fila 0 en lugar de x.

Recientemente actualizamos el controlador JDBC de Oracle de ojdbc5 (versión 11gr2) a ojdbc8 (21.3.0.0) y notamos un comportamiento diferente que no podemos explicar.

“`java
boolean stillDataToProcess = true;
int bufferSize = 20000;

while (stillDataToProcess) {
ResultSet rs = getData();

for (int i=0; i<buffersize; i++) {
if (rs != null && rs.next()) {
// some stuff
} else {
stilldatatoprocess = false
break;
}
}

log.info("número de fila: " + rs.getrow());
// some stuff
}

<strong>logs antes de la actualización</strong>
número de fila: 20000
número de fila: 40000
número de fila: 60000
número de fila: 80000
número de fila: 100000
número de fila: 120000
número de fila: 124851

<strong>logs después de la actualización</strong>
número de fila: 20000
número de fila: 40000
número de fila: 60000
número de fila: 80000
número de fila: 100000
número de fila: 120000
número de fila: 0
“` i++)=”” {=”” if=”” (rs=”” !=”null” &&=”” rs.next())=”” {=”” some=”” stuff=”” }=”” else=”” {=”” stilldatatoprocess=”false” break;=”” }=”” }=”” log.info(“número=”” de=”” fila:=”” +=”” rs.getrow());=”” some=”” stuff=”” }=”” logs=”” antes=”” de=”” la=”” actualización=”” número=”” de=”” fila:=”” 20000=”” número=”” de=”” fila:=”” 40000=”” número=”” de=”” fila:=”” 60000=”” número=”” de=”” fila:=”” 80000=”” número=”” de=”” fila:=”” 100000=”” número=”” de=”” fila:=”” 120000=”” número=”” de=”” fila:=”” 124851=”” logs=”” después=”” de=”” la=”” actualización=”” número=”” de=”” fila:=”” 20000=”” número=”” de=”” fila:=”” 40000=”” número=”” de=”” fila:=”” 60000=”” número=”” de=”” fila:=”” 80000=”” número=”” de=”” fila:=”” 100000=”” número=”” de=”” fila:=”” 120000=”” número=”” de=”” fila:=”” 0=””></buffersize; i++) {
if (rs != null && rs.next()) {
// some stuff
} else {
stilldatatoprocess = false
break;
}
}

log.info(“número de fila: ” + rs.getrow());
// some stuff
}

logs antes de la actualización
número de fila: 20000
número de fila: 40000
número de fila: 60000
número de fila: 80000
número de fila: 100000
número de fila: 120000
número de fila: 124851

logs después de la actualización
número de fila: 20000
número de fila: 40000
número de fila: 60000
número de fila: 80000
número de fila: 100000
número de fila: 120000
número de fila: 0
“`>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La diferencia en el comportamiento podría deberse a un cambio en cómo el controlador ojdbc8 maneja el objeto ResultSet. Es posible que el objeto ResultSet se cierre después de que el bucle for se complete, lo que hace que la declaración de registro imprima un número de fila de 0 en los registros posteriores a la actualización. Una solución podría ser agregar una verificación para confirmar que el ResultSet no está cerrado antes de obtener el número de fila en la declaración de registro. Por ejemplo,

    if (rs != null && !rs.isClosed()) {
       log.info("número de fila: " + rs.getRow());
    }
    

    Esto asegurará que el número de fila solo se imprima si el ResultSet todavía está abierto. Otra posibilidad podría ser que el nuevo controlador sea más eficiente en el manejo de grandes cantidades de datos, lo que resulta en una ligera diferencia de tiempo cuando ocurren ciertas acciones. Sería útil recopilar más información sobre la diferencia específica en el comportamiento e investigar más a fondo.

Comments are closed.