![]() |
| |||||||
| Registrarse | Preguntas Frecuentes | Lista de Foreros | Calendario | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
| | LinkBack | Herramientas | Desplegado |
| |||
| On 19 feb, 07:14, Eduardo Yáñez Parareda <eduardo.yanezNOS...***NOSPAMgmail.com> wrote: > > Amigos .. deseo hacer una consulta ... Es posible adicionar un > > registro al ResultSet sin que actualice la Base de Datos ??? De ser > > posible, como se puede hacer eso ??? > > no creo, ¿pero qué sentido tiene?. Si quieres usar el ResultSet como lista de datos, lee el ResultSet, crea unos > objetos con la información leída, y los guardas en una estructura comoun List, Map, etc..., y luego usas esa estructura > como quieras. Tienes razon, voy a revisar eso ... |
| | ||||
| ||||
| |
| |||
| On 21 feb, 16:14, luisfl...***gmail.com wrote: > On 19 feb, 07:14, Eduardo Yáñez Parareda > > <eduardo.yanezNOS...***NOSPAMgmail.com> wrote: > > > Amigos .. deseo hacer una consulta ... Es posible adicionar un > > > registro al ResultSet sin que actualice la Base de Datos ??? De ser > > > posible, como se puede hacer eso ??? > > > no creo, ¿pero qué sentido tiene?. Si quieres usar el ResultSet comolista de datos, lee el ResultSet, crea unos > > objetos con la información leída, y los guardas en una estructura como un List, Map, etc..., y luego usas esa estructura > > como quieras. > > Tienes razon, voy a revisar eso ... Disculpa tendras posibilidad de revisar este caso y ver si me puedes ayudar por favor ??? Saludos amigos, quiero hacerles una consulta para ver que me sugieren. Estoy haciendo una ventana de consulta. Un JTable y JTextField. De manera que al ir escribiendo en el JTextField, se deberia ir filtrando la informacion consultada, actualizando el JTable en base a un ResultSet. Cuando hago la prueba con una tabla de 12 registros funciona a la perfeccion, el detalle es que cuando la prueba con una tabla de 40 mil registros, se pone lentisimo. Me gustaria tener su recomendaciones sobre lo que podria hacer al respecto ... Es correcto lo que estoy haciendo ? Como podria mejorarlo ? .. Agradezco mucho sus comentarios. Que utilizo es el siguiente: // *** JDialgo JBuscar *** public class JBuscar extends javax.swing.JDialog implements TableModelListener { private Connection conexion; private ResultSet consulta; private ResultSetTableModel tableModel; // *** Constructor *** public JBuscar() { Class.forName("com.ibm.as400.access.AS400JDBCDrive r"); conexion=DriverManager.getConnection(url,usuarios, clave); Statement sentencia=CONEXION.createStatement(ResultSet.TYPE_ SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE, ResultSet.HOLD_CURSORS_OVER_COMMIT); consulta=sentencia.executeQuery("SELECT CODIGOPAIS, DESCRIPCIONPAIS FROM PAIS"); tableModel = new ResultSetTableModel(consulta); initComponents(); } // *** initComponents *** private void initComponents() { ... jTextField1 = new javax.swing.JTextField(); jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new JTable(tableModel); ... } // *** Evento CaretUpdate del jTextField *** private void jTextField1CaretUpdate(javax.swing.event.CaretEven t evt) { if (!this.jTextField1.getText().trim().equals("")) { consulta = FrmPrincipal.getConexionPrincipal().Consulta("SELE CT CODIGOPAIS, DESCRIPCIONPAIS FROM PAIS WHERE CODIGOPAIS + " LIKE '%" + this.jTextField1.getText().trim().toUpperCase() + "%'"); } else { consulta = FrmPrincipal.getConexionPrincipal().Consulta("SELE CT CODIGOPAIS, DESCRIPCIONPAIS FROM PAIS"); } tableModel = new ResultSetTableModel(consulta); this.jTable1.setModel(tableModel); } } //************************** |
| |||
| On 21 feb, 16:14, luisfl...***gmail.com wrote: > On 19 feb, 07:14, Eduardo Yáñez Parareda > > <eduardo.yanezNOS...***NOSPAMgmail.com> wrote: > > > Amigos .. deseo hacer una consulta ... Es posible adicionar un > > > registro al ResultSet sin que actualice la Base de Datos ??? De ser > > > posible, como se puede hacer eso ??? > > > no creo, ¿pero qué sentido tiene?. Si quieres usar el ResultSet comolista de datos, lee el ResultSet, crea unos > > objetos con la información leída, y los guardas en una estructura como un List, Map, etc..., y luego usas esa estructura > > como quieras. > > Tienes razon, voy a revisar eso ... Disculpa tendras posibilidad de revisar este caso y ver si me puedes ayudar por favor ??? Saludos amigos, quiero hacerles una consulta para ver que me sugieren. Estoy haciendo una ventana de consulta. Un JTable y JTextField. De manera que al ir escribiendo en el JTextField, se deberia ir filtrando la informacion consultada, actualizando el JTable en base a un ResultSet. Cuando hago la prueba con una tabla de 12 registros funciona a la perfeccion, el detalle es que cuando la prueba con una tabla de 40 mil registros, se pone lentisimo. Me gustaria tener su recomendaciones sobre lo que podria hacer al respecto ... Es correcto lo que estoy haciendo ? Como podria mejorarlo ? .. Agradezco mucho sus comentarios. Que utilizo es el siguiente: // *** JDialgo JBuscar *** public class JBuscar extends javax.swing.JDialog implements TableModelListener { private Connection conexion; private ResultSet consulta; private ResultSetTableModel tableModel; // *** Constructor *** public JBuscar() { Class.forName("com.ibm.as400.access.AS400JDBCDrive r"); conexion=DriverManager.getConnection(url,usuarios, clave); Statement sentencia=CONEXION.createStatement(ResultSet.TYPE_ SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE, ResultSet.HOLD_CURSORS_OVER_COMMIT); consulta=sentencia.executeQuery("SELECT CODIGOPAIS, DESCRIPCIONPAIS FROM PAIS"); tableModel = new ResultSetTableModel(consulta); initComponents(); } // *** initComponents *** private void initComponents() { ... jTextField1 = new javax.swing.JTextField(); jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new JTable(tableModel); ... } // *** Evento CaretUpdate del jTextField *** private void jTextField1CaretUpdate(javax.swing.event.CaretEven t evt) { if (!this.jTextField1.getText().trim().equals("")) { consulta = FrmPrincipal.getConexionPrincipal().Consulta("SELE CT CODIGOPAIS, DESCRIPCIONPAIS FROM PAIS WHERE CODIGOPAIS + " LIKE '%" + this.jTextField1.getText().trim().toUpperCase() + "%'"); } else { consulta = FrmPrincipal.getConexionPrincipal().Consulta("SELE CT CODIGOPAIS, DESCRIPCIONPAIS FROM PAIS"); } tableModel = new ResultSetTableModel(consulta); this.jTable1.setModel(tableModel); } } //************************** |
| |||
| On 21 feb, 16:14, luisfl...***gmail.com wrote: > On 19 feb, 07:14, Eduardo Yáñez Parareda > > <eduardo.yanezNOS...***NOSPAMgmail.com> wrote: > > > Amigos .. deseo hacer una consulta ... Es posible adicionar un > > > registro al ResultSet sin que actualice la Base de Datos ??? De ser > > > posible, como se puede hacer eso ??? > > > no creo, ¿pero qué sentido tiene?. Si quieres usar el ResultSet comolista de datos, lee el ResultSet, crea unos > > objetos con la información leída, y los guardas en una estructura como un List, Map, etc..., y luego usas esa estructura > > como quieras. > > Tienes razon, voy a revisar eso ... Disculpa tendras posibilidad de revisar este caso y ver si me puedes ayudar por favor ??? Saludos amigos, quiero hacerles una consulta para ver que me sugieren. Estoy haciendo una ventana de consulta. Un JTable y JTextField. De manera que al ir escribiendo en el JTextField, se deberia ir filtrando la informacion consultada, actualizando el JTable en base a un ResultSet. Cuando hago la prueba con una tabla de 12 registros funciona a la perfeccion, el detalle es que cuando la prueba con una tabla de 40 mil registros, se pone lentisimo. Me gustaria tener su recomendaciones sobre lo que podria hacer al respecto ... Es correcto lo que estoy haciendo ? Como podria mejorarlo ? .. Agradezco mucho sus comentarios. Que utilizo es el siguiente: // *** JDialgo JBuscar *** public class JBuscar extends javax.swing.JDialog implements TableModelListener { private Connection conexion; private ResultSet consulta; private ResultSetTableModel tableModel; // *** Constructor *** public JBuscar() { Class.forName("com.ibm.as400.access.AS400JDBCDrive r"); conexion=DriverManager.getConnection(url,usuarios, clave); Statement sentencia=CONEXION.createStatement(ResultSet.TYPE_ SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE, ResultSet.HOLD_CURSORS_OVER_COMMIT); consulta=sentencia.executeQuery("SELECT CODIGOPAIS, DESCRIPCIONPAIS FROM PAIS"); tableModel = new ResultSetTableModel(consulta); initComponents(); } // *** initComponents *** private void initComponents() { ... jTextField1 = new javax.swing.JTextField(); jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new JTable(tableModel); ... } // *** Evento CaretUpdate del jTextField *** private void jTextField1CaretUpdate(javax.swing.event.CaretEven t evt) { if (!this.jTextField1.getText().trim().equals("")) { consulta = FrmPrincipal.getConexionPrincipal().Consulta("SELE CT CODIGOPAIS, DESCRIPCIONPAIS FROM PAIS WHERE CODIGOPAIS + " LIKE '%" + this.jTextField1.getText().trim().toUpperCase() + "%'"); } else { consulta = FrmPrincipal.getConexionPrincipal().Consulta("SELE CT CODIGOPAIS, DESCRIPCIONPAIS FROM PAIS"); } tableModel = new ResultSetTableModel(consulta); this.jTable1.setModel(tableModel); } } //************************** |
| |||
| On 21 feb, 16:14, luisfl...***gmail.com wrote: > On 19 feb, 07:14, Eduardo Yáñez Parareda > > <eduardo.yanezNOS...***NOSPAMgmail.com> wrote: > > > Amigos .. deseo hacer una consulta ... Es posible adicionar un > > > registro al ResultSet sin que actualice la Base de Datos ??? De ser > > > posible, como se puede hacer eso ??? > > > no creo, ¿pero qué sentido tiene?. Si quieres usar el ResultSet comolista de datos, lee el ResultSet, crea unos > > objetos con la información leída, y los guardas en una estructura como un List, Map, etc..., y luego usas esa estructura > > como quieras. > > Tienes razon, voy a revisar eso ... Disculpa tendras posibilidad de revisar este caso y ver si me puedes ayudar por favor ??? Saludos amigos, quiero hacerles una consulta para ver que me sugieren. Estoy haciendo una ventana de consulta. Un JTable y JTextField. De manera que al ir escribiendo en el JTextField, se deberia ir filtrando la informacion consultada, actualizando el JTable en base a un ResultSet. Cuando hago la prueba con una tabla de 12 registros funciona a la perfeccion, el detalle es que cuando la prueba con una tabla de 40 mil registros, se pone lentisimo. Me gustaria tener su recomendaciones sobre lo que podria hacer al respecto ... Es correcto lo que estoy haciendo ? Como podria mejorarlo ? .. Agradezco mucho sus comentarios. Que utilizo es el siguiente: // *** JDialgo JBuscar *** public class JBuscar extends javax.swing.JDialog implements TableModelListener { private Connection conexion; private ResultSet consulta; private ResultSetTableModel tableModel; // *** Constructor *** public JBuscar() { Class.forName("com.ibm.as400.access.AS400JDBCDrive r"); conexion=DriverManager.getConnection(url,usuarios, clave); Statement sentencia=CONEXION.createStatement(ResultSet.TYPE_ SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE, ResultSet.HOLD_CURSORS_OVER_COMMIT); consulta=sentencia.executeQuery("SELECT CODIGOPAIS, DESCRIPCIONPAIS FROM PAIS"); tableModel = new ResultSetTableModel(consulta); initComponents(); } // *** initComponents *** private void initComponents() { ... jTextField1 = new javax.swing.JTextField(); jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new JTable(tableModel); ... } // *** Evento CaretUpdate del jTextField *** private void jTextField1CaretUpdate(javax.swing.event.CaretEven t evt) { if (!this.jTextField1.getText().trim().equals("")) { consulta = FrmPrincipal.getConexionPrincipal().Consulta("SELE CT CODIGOPAIS, DESCRIPCIONPAIS FROM PAIS WHERE CODIGOPAIS + " LIKE '%" + this.jTextField1.getText().trim().toUpperCase() + "%'"); } else { consulta = FrmPrincipal.getConexionPrincipal().Consulta("SELE CT CODIGOPAIS, DESCRIPCIONPAIS FROM PAIS"); } tableModel = new ResultSetTableModel(consulta); this.jTable1.setModel(tableModel); } } //************************** |
| |||
| On 21 feb, 16:14, luisfl...***gmail.com wrote: > On 19 feb, 07:14, Eduardo Yáñez Parareda > > <eduardo.yanezNOS...***NOSPAMgmail.com> wrote: > > > Amigos .. deseo hacer una consulta ... Es posible adicionar un > > > registro al ResultSet sin que actualice la Base de Datos ??? De ser > > > posible, como se puede hacer eso ??? > > > no creo, ¿pero qué sentido tiene?. Si quieres usar el ResultSet comolista de datos, lee el ResultSet, crea unos > > objetos con la información leída, y los guardas en una estructura como un List, Map, etc..., y luego usas esa estructura > > como quieras. > > Tienes razon, voy a revisar eso ... Disculpa tendras posibilidad de revisar este caso y ver si me puedes ayudar por favor ??? Saludos amigos, quiero hacerles una consulta para ver que me sugieren. Estoy haciendo una ventana de consulta. Un JTable y JTextField. De manera que al ir escribiendo en el JTextField, se deberia ir filtrando la informacion consultada, actualizando el JTable en base a un ResultSet. Cuando hago la prueba con una tabla de 12 registros funciona a la perfeccion, el detalle es que cuando la prueba con una tabla de 40 mil registros, se pone lentisimo. Me gustaria tener su recomendaciones sobre lo que podria hacer al respecto ... Es correcto lo que estoy haciendo ? Como podria mejorarlo ? .. Agradezco mucho sus comentarios. Que utilizo es el siguiente: // *** JDialgo JBuscar *** public class JBuscar extends javax.swing.JDialog implements TableModelListener { private Connection conexion; private ResultSet consulta; private ResultSetTableModel tableModel; // *** Constructor *** public JBuscar() { Class.forName("com.ibm.as400.access.AS400JDBCDrive r"); conexion=DriverManager.getConnection(url,usuarios, clave); Statement sentencia=CONEXION.createStatement(ResultSet.TYPE_ SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE, ResultSet.HOLD_CURSORS_OVER_COMMIT); consulta=sentencia.executeQuery("SELECT CODIGOPAIS, DESCRIPCIONPAIS FROM PAIS"); tableModel = new ResultSetTableModel(consulta); initComponents(); } // *** initComponents *** private void initComponents() { ... jTextField1 = new javax.swing.JTextField(); jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new JTable(tableModel); ... } // *** Evento CaretUpdate del jTextField *** private void jTextField1CaretUpdate(javax.swing.event.CaretEven t evt) { if (!this.jTextField1.getText().trim().equals("")) { consulta = FrmPrincipal.getConexionPrincipal().Consulta("SELE CT CODIGOPAIS, DESCRIPCIONPAIS FROM PAIS WHERE CODIGOPAIS + " LIKE '%" + this.jTextField1.getText().trim().toUpperCase() + "%'"); } else { consulta = FrmPrincipal.getConexionPrincipal().Consulta("SELE CT CODIGOPAIS, DESCRIPCIONPAIS FROM PAIS"); } tableModel = new ResultSetTableModel(consulta); this.jTable1.setModel(tableModel); } } //************************** |
| |||
| > private Connection conexion; > private ResultSet consulta; > private ResultSetTableModel tableModel; A primera vista, nunca tendría un atributo ResultSet. Lee el ResultSet y guarda la info en un List, Set o lo que mejor te venga. En segundo lugar, las conexiones a la BD, ¿en qué momento las liberas?, en ningún sitio. Forma correcta de hacer una consulta (más o menos): public void foo() { Connection conn = null; Statement stmt = null; try { conn = getConexion()....; stmt = conn.createStatement.... ResultSet rs = stmt.executeQuery.... // Bucle para recorrer el ResultSet y guardarlo en una estructura.... while(rs.hasNext()) { ..... } } catch (Exception ex) { ex.printStackTrace(); } finally { try { if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException ex) { ex.printStackTrace(); } } } Si no tienes más remedio, usa las conexiones así, pero yo usaría pooles de conexiones, o algo como Hibernate para gestionar todo eso. Al dejar conexiones y statements abiertos, dejas muchos recursos sin liberar, por lo que te quedas sin memoria... |
| |||
| > private Connection conexion; > private ResultSet consulta; > private ResultSetTableModel tableModel; A primera vista, nunca tendría un atributo ResultSet. Lee el ResultSet y guarda la info en un List, Set o lo que mejor te venga. En segundo lugar, las conexiones a la BD, ¿en qué momento las liberas?, en ningún sitio. Forma correcta de hacer una consulta (más o menos): public void foo() { Connection conn = null; Statement stmt = null; try { conn = getConexion()....; stmt = conn.createStatement.... ResultSet rs = stmt.executeQuery.... // Bucle para recorrer el ResultSet y guardarlo en una estructura.... while(rs.hasNext()) { ..... } } catch (Exception ex) { ex.printStackTrace(); } finally { try { if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException ex) { ex.printStackTrace(); } } } Si no tienes más remedio, usa las conexiones así, pero yo usaría pooles de conexiones, o algo como Hibernate para gestionar todo eso. Al dejar conexiones y statements abiertos, dejas muchos recursos sin liberar, por lo que te quedas sin memoria... |
| |||
| > private Connection conexion; > private ResultSet consulta; > private ResultSetTableModel tableModel; A primera vista, nunca tendría un atributo ResultSet. Lee el ResultSet y guarda la info en un List, Set o lo que mejor te venga. En segundo lugar, las conexiones a la BD, ¿en qué momento las liberas?, en ningún sitio. Forma correcta de hacer una consulta (más o menos): public void foo() { Connection conn = null; Statement stmt = null; try { conn = getConexion()....; stmt = conn.createStatement.... ResultSet rs = stmt.executeQuery.... // Bucle para recorrer el ResultSet y guardarlo en una estructura.... while(rs.hasNext()) { ..... } } catch (Exception ex) { ex.printStackTrace(); } finally { try { if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException ex) { ex.printStackTrace(); } } } Si no tienes más remedio, usa las conexiones así, pero yo usaría pooles de conexiones, o algo como Hibernate para gestionar todo eso. Al dejar conexiones y statements abiertos, dejas muchos recursos sin liberar, por lo que te quedas sin memoria... |
| |
| |
| |||
| > private Connection conexion; > private ResultSet consulta; > private ResultSetTableModel tableModel; A primera vista, nunca tendría un atributo ResultSet. Lee el ResultSet y guarda la info en un List, Set o lo que mejor te venga. En segundo lugar, las conexiones a la BD, ¿en qué momento las liberas?, en ningún sitio. Forma correcta de hacer una consulta (más o menos): public void foo() { Connection conn = null; Statement stmt = null; try { conn = getConexion()....; stmt = conn.createStatement.... ResultSet rs = stmt.executeQuery.... // Bucle para recorrer el ResultSet y guardarlo en una estructura.... while(rs.hasNext()) { ..... } } catch (Exception ex) { ex.printStackTrace(); } finally { try { if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException ex) { ex.printStackTrace(); } } } Si no tienes más remedio, usa las conexiones así, pero yo usaría pooles de conexiones, o algo como Hibernate para gestionar todo eso. Al dejar conexiones y statements abiertos, dejas muchos recursos sin liberar, por lo que te quedas sin memoria... |
![]() |
| Herramientas | |
| Desplegado | |
| |
Temas Similares | ||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Lentitud en mi sistema cuando hay muchos usuarios conectados a labase de datos | farego19@gmail.com | Newsgroup microsoft.public.es.vfoxpro | 1 | 23-06-2008 19:02:57 |
| Actualizacion de Base de Datos Mediante Un Resultset | luisfleon@gmail.com | Newsgroup es.comp.lenguajes.java | 5 | 13-03-2008 18:12:44 |
| Posible perdida de datos | Sergio | Newsgroup microsoft.public.es.windowsxp.hardware | 12 | 16-10-2007 13:43:25 |
| Adicionar coma a datos character | Alonso Vilela | Newsgroup microsoft.public.es.vfoxpro.datos | 0 | 14-02-2007 22:31:35 |
| ResultSet - Posicionarse en un registro | Juan Carlos Trapero | Newsgroup es.comp.lenguajes.java | 6 | 18-08-2005 15:22:08 |