Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Contar Registros

Hola a todos. Otra vez consultando.
Estoy tratando de contar los registros de un Resulset. Se que se podria hacer con un "select count(1) as miCantidadReg from tabla", pero no habra algo mas sencillo de tal forma que no tenga que hacer otra consulta. He probado varias formas, pero no logro hacer que me devuelva la cantidad de filas. No halgo asi como en Visual Basic que hace miRecordSet.Recordcount() y devuelve la cantidad de filas. Soy muuuuyyy nuevo en java siempre en Visual Basic 6, 2005 y 2010

Gracias y disculpas

abril 23, 2013 | Unregistered CommenterGerardo López

Despues de obtener el ResultSet con la sentencia rs= stm.executeQuery();
Puedes ir al final del resulset con rs.last();
Luego obtener el row con la sentencia int row = rs.getRow();

abril 24, 2013 | Unregistered CommenterCarlos

Carlos, gracias por contestar.
Probe lo que me dijiste, pero me da un error. Te paso el pedazo de codigo que utilizo para ver si me podes indicar donde le estoy errando. Cuando le agrego la linea last(), me da un error. el mismo codigo de conexion lo utilizo para otras cosas y funciona correctamente.

String userName = "sa";
String password = "";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection con = DriverManager.getConnection("jdbc:sqlserver://10.125.100.2:1433;databasename=PGMV6;", userName, password);
Statement rstCuentaBusco = con.createStatement();

ResultSet txtCuentaBusco = rstCuentaBusco.executeQuery("SELECT * FROM personas");

txtCuentaBusco.last(); // Aca me da un error: La operación solicitada no es compatible en conjuntos de resultados exclusivamente de reenvío.

Otravez gracias y saludos

abril 24, 2013 | Unregistered CommenterGerardo López

Podes cambiar la sentencia:
con.createStatement();

Por:
con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

abril 24, 2013 | Unregistered CommenterCarlos

Gracias por contestar.
Lo hice, pero me manda el siguiente error, te paso todo lo que dice (yo no entendi nada) mil gracias


abr 24, 2013 4:37:40 PM com.microsoft.sqlserver.jdbc.TDSReader throwInvalidTDS
Grave: ConnectionID:6 got unexpected value in TDS response at offset:262
com.microsoft.sqlserver.jdbc.SQLServerException: La secuencia del protocolo TDS no es válida.
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1352)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1339)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.throwInvalidTDS(SQLServerConnection.java:1328)
at com.microsoft.sqlserver.jdbc.TDSReader.throwInvalidTDS(IOBuffer.java:3610)
at com.microsoft.sqlserver.jdbc.TDSReader.readSQLIdentifier(IOBuffer.java:4333)
at com.microsoft.sqlserver.jdbc.StreamTabName.applyTo(StreamTabName.java:41)
at com.microsoft.sqlserver.jdbc.StreamColumns.buildColumns(StreamColumns.java:91)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet$1CursorInitializer.buildColumns(SQLServerResultSet.java:160)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.(SQLServerResultSet.java:285)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1504)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteCursored(SQLServerStatement.java:1853)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:749)
at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:676)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(SQLServerStatement.java:611)
at Contable.jfrmPlanCuentasIngresos.jtxtNroCuentaActionPerformed(jfrmPlanCuentasIngresos.java:658)
at Contable.jfrmPlanCuentasIngresos.access$1500(jfrmPlanCuentasIngresos.java:33)
at Contable.jfrmPlanCuentasIngresos$15.actionPerformed(jfrmPlanCuentasIngresos.java:293)
at javax.swing.JTextField.fireActionPerformed(JTextField.java:508)
at javax.swing.JTextField.postActionEvent(JTextField.java:721)
at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:836)
at javax.swing.JFormattedTextField$CommitAction.actionPerformed(JFormattedTextField.java:1124)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1661)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2879)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2926)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2842)
at java.awt.Component.processEvent(Component.java:6281)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4860)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1908)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:752)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1017)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:889)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:717)
at java.awt.Component.dispatchEventImpl(Component.java:4730)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

abril 24, 2013 | Unregistered CommenterGerardo López

El problema está en que SQL entrega el result set posicionado antes del primer registro.

febrero 18, 2015 | Unregistered CommenterChucky