Foros del Web » Programación para mayores de 30 ;) » Java »

Consulta importante

Estas en el tema de Consulta importante en el foro de Java en Foros del Web. Bueno estoy desarrollando un aplicacion en Java con una base de Datos en Sybase MI duda se debe a lo siguiente mi aplicativo va ser ...
  #1 (permalink)  
Antiguo 04/07/2012, 13:30
 
Fecha de Ingreso: febrero-2012
Mensajes: 136
Antigüedad: 12 años, 2 meses
Puntos: 8
Consulta importante

Bueno estoy desarrollando un aplicacion en Java con una base de Datos en Sybase

MI duda se debe a lo siguiente mi aplicativo va ser consultas a la base de datos .. pero no es solo un usuario son con 50 usuarios que van a tener mi aplicativo

Y me gustaría saber como debo realizar mis consultas a la base de datos tengo las siguiente funciones en mi clase conexion

Código java:
Ver original
  1. public void abrirConexion()
  2.     {
  3.  
  4.     try {
  5.  
  6.         Class.forName("com.sybase.jdbc3.jdbc.SybDriver");
  7.         String url = "jdbc:sybase:Tds:"+ip+":"+puerto;
  8.         con = DriverManager.getConnection(url, user,pass);
  9.         db = con.createStatement();
  10.      }  catch (SQLException ex) {
  11.             Logger.getLogger(Conexion.class.getName()).log(Level.SEVERE, null, ex);
  12.         }
  13.         catch (ClassNotFoundException ex) {
  14.          }
  15.    
  16.     }
  17.    
  18.  
  19.     /**
  20.     * Método que permite ejecutar un sql en la Base de Datos.
  21.     *
  22.     * @param sql
  23.     * El sql a ser ejecutado.
  24.     * @return boolean Verdadero si ejecutó el sql y falso en caso contrario.
  25.     */
  26.  
  27.     public boolean ejecutarQuery(String sql)
  28.     {
  29.  
  30.         try {
  31.             db.execute(sql);
  32.             return true;
  33.         }
  34.         catch (SQLException ex) {
  35.             ex.printStackTrace();
  36.             return false;
  37.         }
  38.  
  39.     }
  40.  
  41.     /**
  42.     * Método que permite obtener un conjunto de registro desde la BD.
  43.     *
  44.     * @param sql
  45.     * El sql a ser ejecutado.
  46.     * @return ResultSet El conjunto de registros.
  47.     */
  48.  
  49.     public ResultSet obtenerRegistros(String sql) {
  50.  
  51.         try {
  52.  
  53.             db = con.createStatement();
  54.             return db.executeQuery(sql);
  55.         }
  56.         catch (SQLException ex) {
  57.             ex.printStackTrace();
  58.             return null;
  59.         }
  60.  
  61.     }
  62.  
  63.     /**
  64.     * Método que permite cerrar un ResultSet.
  65.     *
  66.     * @param rs
  67.     * El ResultSet a ser cerrado.
  68.     */
  69.  
  70.     public void cerrarRs()
  71.     {
  72.  
  73.      if (rs != null)
  74.      {  
  75.         try {
  76.  
  77.         rs.close();
  78.  
  79.         } catch (SQLException ex) {
  80.  
  81.         ex.printStackTrace();
  82.  
  83.         }
  84.  
  85.      }
  86.  
  87.     }
  88.      /**
  89.     * Método que permite cerrar la conexion con la BD.
  90.     */
  91.     public void cerrarConexion()
  92.     {
  93.         try
  94.         {
  95.             if (db != null)
  96.             {
  97.                 db.close();
  98.             }
  99.  
  100.             if (con != null)
  101.             {
  102.                 con.close();
  103.             }
  104.  
  105.         }
  106.         catch (SQLException ex) {
  107.             ex.printStackTrace();
  108.         }
  109.  
  110.     }

lo que hago si quiero realizar una consulta a la base es lo siguiente

Código Java:
Ver original
  1. oc.abrirConexion();
  2.         rs=oc.obtenerRegistros("SELECT * FROM Personas");
  3.         PreparaComboPersonas();
  4.         oc.cerrarRs();
  5.         oc.cerrarConexion();

Me gustaria saber si lo que estoy haciendo es correcto ... o alguna sugerencia que me pueda ayudar con mi duda muchas gracias
  #2 (permalink)  
Antiguo 04/07/2012, 14:25
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Consulta importante

Hola:

Antes de nada, habría que aclarar si se arranca tu aplicación una sola vez y la usan 50 usuarios (una especie de servidor en el que cada usuario tiene su interfaz de usuario), o si cada usuario va a arrancar su propia aplicación desde su PC y hace sus propias consultas.

Si los 50 usuarios van a hacer esporádicamente consultas a la base de datos o cada uno tiene su propia aplciación, tu método puede ser bueno. Abrir y cerrar una conexión por cada consulta es un proceso costoso, pero puede ser asumible si las consultas son de vez en cuando y no un proceso continuo.

Si las consultas van a ser más frecuentes pero no es fácil que sean simultáneas (cada usuario tiene su propia aplciación, por lo que realmente cada usuario tiene su propia conexión), entonces puedes abrir una única conexión al principio del programa y mantenerla abierta. Necesitas hacer un

syncrhonize(connection) {
código de consulta
}

para evitar que dos usuarios usen simultáneamente la misma conexión. Esto hace que un usuario tenga que esperar a que el anterior termine, pero estamos suponiendo que esa circunstancia no es probable.

Si los 50 usuarios se conectan a la vez en una misma aplicación y se lian a hacer consultas simultáneamente, lo más eficiente es usar un pool de conexiones. Tendrías que bajarte y usar algo como apache commons dbcp, que tiene pool de conexiones ya hecho http://commons.apache.org/dbcp/configuration.html

Más info y algún ejemplo, aquí http://chuidiang.org/content/pool-de-conexiones

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Última edición por chuidiang; 04/07/2012 a las 14:31
  #3 (permalink)  
Antiguo 04/07/2012, 22:16
 
Fecha de Ingreso: febrero-2012
Mensajes: 136
Antigüedad: 12 años, 2 meses
Puntos: 8
Respuesta: Consulta importante

Muchas gracias ... por responderme

Etiquetas: clase, importante, string, aplicaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:46.