![]() |
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. |
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. |
Gracias, pero yo queria ahorrarme una consulta en sql, y saber cuantros reqistros tiene la matriz.:-( |
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 |
Muchas gracias. es una pena que no exista un funcion tipo mysql_num_rows($query) de PHP:no: HAsta pronto.:-) :adios: |
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 ;-) |
Cita:
have funnnnn guys!! :adios: |
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); |
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. |
Cita:
int rows = 0; rs = st.executeQuery(sql); while (rs.next()) rows++; System.out.print("Nro de filas: "+row); rs.first(); |
Cita:
Código: Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,Saludos Malebolgia |
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 |
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. |
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.