Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Java (http://www.forosdelweb.com/f45/)
-   -   numero de filas de una query en java (http://www.forosdelweb.com/f45/numero-filas-query-java-351906/)

OrionKing 22/11/2005 06:17

numero de filas de una query en java
 
Hola todos tengo un preguntilla. ¿Alguien sabe como se devuleve el numero de filas que tiene una query en java?:pensando:
He leído que hay que hacer algo tal que:

if (rs.last()){
numOfRows = rs.getRow();
} else {
numOfRows = 0;
}
System.out.println("Numero de actos: " + numOfRows);
rs.first();

Pero es un poco guarro, ademas luego el cursor me devuelve un registro menos pq leo en un while y tendria que montar un do while o en un for...

He mirado el metodo
rs.getFetchSize() pero me devuelve un 0.

Gracias por todo.

GreenEyed 22/11/2005 10:01

Como en casi cualquier lenguaje, haces un "select count(1)...", que no es 100% seguro, o los cuentas "a mano" recorriendo el resultSet.

Algunos drivers te pueden devolver cuantos registros directamente, por que lo que hacen es contarlo ellos por debajo, pero no es portable entre todas las BDD asi que tendrias que mirar el driver que uses.

OrionKing 23/11/2005 10:11

Gracias, pero yo queria ahorrarme una consulta en sql, y saber cuantros reqistros tiene la matriz.:-(

GreenEyed 23/11/2005 13:58

Si los vas a procesar de todas formas, entonces pasa los datos que te interese a una lista y despues cuentas cuantos hay.

Si no los vas a procesar despues, entonces haz un select count.

Como te he dicho, tambien puedes intentar recuperarlo directamente del resultSet, pero depende del driver y de la base de datos, asi que no te puedes fiar mucho de eso.

Es lo que hay

OrionKing 25/11/2005 03:24

Muchas gracias.

es una pena que no exista un funcion tipo mysql_num_rows($query) de PHP:no:

HAsta pronto.:-)

:adios:

GreenEyed 25/11/2005 04:46

Este... si no me equivoco, esa funcion de PHP solo es para MySQL, asi que no puedes comparar eso con JDBC que sirve para cualquier BDD :-). Seguramente con el driver de MySQL lo puedas hacer, pero no como regla general, pero es por cuestion de las diferentes bases de datos, no de Java.

A la hora de comparar cosas, tienen que ser equivalentes ;-)

stock 25/11/2005 09:41

Cita:

Iniciado por GreenEyed
A la hora de comparar cosas, tienen que ser equivalentes ;-)

jejejejje, bien dicho :-D

have funnnnn guys!! :adios:

hamstelfo 12/04/2006 02:49

Esta es la clave
 
Por si le sirve a alguien, a mi tp me iba el getFetchSize, pero aki esta la solucion

r=st.executeQuery(sql);
r.last();
int numRows = r.getRow();
r.beforeFirst(); // esto te lo deja como al principio
out.print(numRows);

chuidiang 28/06/2006 14:49

Hola:

De todas formas habría que ver qué hace mysql_num_rows($query) por dentro. Igual hace la consulta similar a "select count" de la que se hablaba. Ten en cuenta que tanto en java como en php al final se conecta y se envía una "consulta" a la base de datos y esta responde. Quizás en realidad con php no te ahorres la consulta, simplemente no ves que se hace. Es fácil reemplazar un "select campos from tabla where .." por un "select count from tabla where..." internamente.

Se bueno.

locoporelrojo 29/06/2006 09:58

Cita:

Iniciado por OrionKing
Hola todos tengo un preguntilla. ¿Alguien sabe como se devuleve el numero de filas que tiene una query en java?:pensando:
He leído que hay que hacer algo tal que:

if (rs.last()){
numOfRows = rs.getRow();
} else {
numOfRows = 0;
}
System.out.println("Numero de actos: " + numOfRows);
rs.first();

Pero es un poco guarro, ademas luego el cursor me devuelve un registro menos pq leo en un while y tendria que montar un do while o en un for...

He mirado el metodo
rs.getFetchSize() pero me devuelve un 0.

Gracias por todo.

Creo q podes trabajarlo de la sgte forma:

int rows = 0;
rs = st.executeQuery(sql);
while (rs.next())
rows++;
System.out.print("Nro de filas: "+row);
rs.first();

Malebolgia 16/08/2006 09:45

Cita:

Iniciado por hamstelfo (Mensaje 1501215)
Por si le sirve a alguien, a mi tp me iba el getFetchSize, pero aki esta la solucion

r=st.executeQuery(sql);
r.last();
int numRows = r.getRow();
r.beforeFirst(); // esto te lo deja como al principio
out.print(numRows);

Recordar declarar el Statement de la siguiente forma:
Código:

Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                        ResultSet.CONCUR_READ_ONLY ) ;


Saludos
Malebolgia

alejandro2007_1 22/09/2007 09:51

Re: numero de filas de una query en java
 
Hola q tal, respecto a la ultima respuesta
/////////////////////////////////Publicado por Malebolgia//////////////////////////////////////
Recordar declarar el Statement de la siguiente forma:

Código:
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSI TIVE,
ResultSet.CONCUR_READ_ONLY ) ;

//////////////////////////////////////////////////////////////////////////////////////////////////////
Obtengo el siguiente error

10:49:10,828 INFO [STDOUT] No se pudo realizar el listado de los Mensajes --> org.postgresql.util.PSQLException: Operation requires a scrollable ResultSet, but this ResultSet is FORWARD_ONLY.

Alguien me podria ayudar

Gracias

elAntonie 24/09/2007 02:34

Re: numero de filas de una query en java
 
No puedes usar el metodo first con un resultset unidireccional.

Te da el error porque has creado un resultset tipo forward_only (la opcion por defecto) es decir vas del primer registro al lultimo y no puedes volver atras.

Por eso el first() te da error.

Tienes la solucion en el api de resultset.

Saludos.

mariojava 01/09/2010 14:39

Respuesta: numero de filas de una query en java
 
Gente tengo una solucion para este tema y es :

// Primera Parte
int cantColumnas = 0; // es donde va a quedar el dato de la cantidad de Columnas.
String query = "Select * from tabla";

//Segunda Parte
Class.forName("net.sourceforge.jtds.jdbc.Driver"). newInstance();
cn = DriverManager.getConnection(
"jdbc:jtds:sqlserver://IPSERVIDOR:PUERTO/BASEDATOS", "USUARIO", "PASSWORD");

Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSI TIVE, ResultSet.CONCUR_READ_ONLY);

resultSet = stmt.executeQuery(query);

//Tercera parte
cantColumnas = resultSet.getMetaData().getColumnCount();



Ahora explico un poco:

La primera parte son las variables.
La segunda parte es la conexión y donde ejecutamos la query.
Y la tercera parte que es la que hace la pega es al "resulSet" le sacamos los nombres de las columnas con el getMetaData() y con el getColumnCount() las contamos. Así de fácil y bonito.

Espero que les sirva como a mi. Que me salvo la tarde en la pega.


Saludos.


La zona horaria es GMT -6. Ahora son las 05:07.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.