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

Duda básica MySQL + NetBeans

Estas en el tema de Duda básica MySQL + NetBeans en el foro de Java en Foros del Web. Hola foro, Estoy empezando con el lenguaje Java en aplicaciones de escritorio y tengo una duda de principiante en cuanto a la conexión con la ...
  #1 (permalink)  
Antiguo 23/11/2011, 02:48
 
Fecha de Ingreso: octubre-2008
Mensajes: 30
Antigüedad: 15 años, 6 meses
Puntos: 1
Información Duda básica MySQL + NetBeans

Hola foro,

Estoy empezando con el lenguaje Java en aplicaciones de escritorio y tengo una duda de principiante en cuanto a la conexión con la BD. Realicé la conexión como está explicado en foros de netbeans, con el conector/driver MySQL, ningún problema por ese lado.

Voy a base de tutoriales de distintas fuentes, por lo que no sé si lo que hago es del todo correcto "en conjunto":

En una parte de mi programa, muestro una tabla (enlazada con my BD del localhost) y cada vez que hago click en una fila me muestra el detalle. Esto lo conseguí, entre otras cosas, creando "Clases de entidades desde bases de datos", dentro de la categoria "Peristence". Funciona todo bien.

Ahora, en otra parte de mi programa, relleno un formulario en un JDialog y a la hora de introducir los datos a la BD, me creo un objeto ConexionMySQL, gracias a un metodo conexion que he definido anteriormente (lo que vendria a ser una funcion Conectar de php) y ejecuto la sentencia con PreparedStatement

Mi duda ¿Estoy programando correctamente? No entiendo que para consultas se programe la sentencia SQL de una manera completamente distinta que para la inserción de datos, ¿quizás estoy mezclando dos maneras distintas de hacer las cosas? Además, lo de tener un servidor en localhost para realizar todas las pruebas, ¿cómo se traduce una vez compilamos el programa en un .exe? ¿Cómo accede el programa a su BD entonces?

Muchas gracias por vuestro tiempo y ya de entrada disculpad si la duda os parece una tontería.
  #2 (permalink)  
Antiguo 23/11/2011, 16:32
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Duda básica MySQL + NetBeans

hola cmo estas...

me impresiona un poco que hables de .exe...

pues cuando necesites llevarte el programa solo creas un archivo con extension.jar, y ejecutas dicho .jar en cualquier otro equipo, sistema operativo etc... y pues el equipo debe tener el jdk.

conozco mas de java, que de cualquier otra cosa, y pues al programar trato de respestar las normas de orientacion a objetos.

hice hace poco un aplicacion java de escritorio, en donde utilize una bd enbebida( java derby), y la clase que utilice para hacer las consultas fue la siguiente:

Clase para conectar a una bd enbebida
Código:
package Bd;



public class ConectarDerby {
   
private String url;
    //private  String url;
	    public LinkedList<ArrayList> Consulta(String sql,int numColumnas) 
	    {
               
              
                Connection con=null;
                Statement s=null; 
                ResultSet rs=null;
                
                LinkedList<ArrayList> filas = new LinkedList<ArrayList>();
                
                
                
	            try
	            {
                        
                        Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
                        String carpeta;
                        if(MarcoPrincipal.getSo().equals("Linux")){
                        carpeta="/BD";
                        }else{
                        carpeta=String.valueOf((char)(92))+"BD"; 
                        }
                        
                        
                        url= "jdbc:derby:"+MarcoPrincipal.getDirectorioAplicacion()+carpeta;
             
                        con = DriverManager.getConnection(url, "stiven", "stiven");
                        
                        s = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
	                                                      ResultSet.CONCUR_READ_ONLY);
                             

                            
	                rs = s.executeQuery(sql);
                            
                         while (rs.next()) {
                             
                            ArrayList<Object> aux=new ArrayList<Object>();
                            for (int i = 1; i <= numColumnas; i++) { 
                            aux.add(rs.getObject(i));
                            }
                            filas.add(aux);
                         }
                         
                          rs.close();
                          s.close();
                          con.close();
                          
	                  
                            
                } catch (SQLException ex) {
                  
                        JOptionPane.showMessageDialog(null, "<html><center>Error: Es probable que la base de datos</center> "
                                + "<center>no se encuentre en la carpeta del programa, o que este software ya se encuentre en ejecución.</center> ");
                   
                } catch (ClassNotFoundException ex) {
                   
    
                  
                   
                    
                } finally {
                        
                        
                    try {
                        if (rs != null) {
                            rs.close();
                        }
                         if (s != null) {
                            s.close();
                        }
                         if (con != null) {
                            con.close();
                        }
                       
                       
                       
                    } catch (SQLException ex1) {
                        Logger.getLogger(ConectarDerby.class.getName()).log(Level.SEVERE, null, ex1);
                    }
                    
                    
                }
                    
                   
                return filas;
	    }

	    public boolean EjecutarIntruccion(String sql) 
	    {
                
                
                boolean retorno=false;
                Connection con=null;
                Statement s=null;
         
                
	 	     try
	            {
            
                              Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
             
                                String carpeta;
                                if(MarcoPrincipal.getSo().equals("Linux")){
                                carpeta="/BD";
                                 }else{
                                    carpeta=String.valueOf((char)(92))+"BD"; 
                                    }
                                    url= "jdbc:derby:"+MarcoPrincipal.getDirectorioAplicacion()+carpeta;
                                    
                                     con = DriverManager.getConnection(url,"stiven","stiven");
                                     s = con.createStatement();
                                     s.executeUpdate(sql);
	                             s.close();
	                             con.close();
                            
                    retorno = true;
                } catch (SQLException ex) {
                   JOptionPane.showMessageDialog(null,"<html><center>Error: Es probable que la base de datos</center> "
                            + "<center>no se encuentre en la carpeta del programa, o que este software ya se encuentre en ejecución.</center> ");
                } catch (ClassNotFoundException ex) {
                
                    System.out.println(ex.toString());
                }
                    finally{
                        
                          try {
                               
                             
                          if(con!=null)con.close();
                          if(s!=null)s.close();
                         
                          } catch (SQLException ex) {
                          Logger.getLogger(ConectarDerby.class.getName()).log(Level.SEVERE, null, ex);
                          }
                    }       
                            
                  return retorno;          
               
            }


           /* JOptionPane.showMessageDialog(null,"<html><center>Error: Es probable que la base de datos</center> "
                            + "<center>no se encuentre en la carpeta del programa, o que este software ya se encuentre en ejecución.</center> ");*/


     public boolean pruebaConexion()
     {
                
            boolean retorno;
                Connection con=null;
               
         
                     try
	            {
            
                              Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
             
                                String carpeta;
                                if(MarcoPrincipal.getSo().equals("Linux")){
                                carpeta="/BD";
                                 }else{
                                    carpeta=String.valueOf((char)(92))+"BD"; 
                                    }
                                    url= "jdbc:derby:"+MarcoPrincipal.getDirectorioAplicacion()+carpeta;
                                    
                                     con = DriverManager.getConnection(url,"stiven","stiven");
	                             con.close();
                            
                            retorno= true;
	            }
	            catch(SQLException e)
	            {

              
                     retorno=false;     
                          
	            }catch (ClassNotFoundException ex) 
                    {
                    retorno=false;
                    }
                    finally{
                        
                          try {
                               
                          if(con!=null)con.close();
                         
                         } catch (SQLException ex) {
                          Logger.getLogger(ConectarDerby.class.getName()).log(Level.SEVERE, null, ex);
                          }
                    }       
                            
                  return retorno;  
         
         
         
       }  

           





}
utilice unos objetos viejos, pues siempre e visto unas advertencias algo inquietantes con cachedrowset, probablemente se pueda hacer mejor...

Este programa cuando ya esta empaquetado en su .jar y cuando esta en ejecucion: busca la bd, (en el caso de java derby enbebida es una carpeta y en el caso de este programa puse esta carpeta dentro del mismo directorio en donde esta el .jar) y lo hace obteniendo la ruta con ayuda de un metodo en una clase externa para posteriormente hacer la conexion.

la correcta programacion (en bd embebidas, en mi opinión):

1) En la clase ConectarDerby, estan dos métodos, lo ideal es que estos sean los unicos en todo el programa que se conecten a la bd para hacer las consultas (el metodo que devuelve algo de una consulta y el metodo que solo ejecuta una consulta que no debuelve nada(update...etc) pero que devuelve la afirmacion(boolean) de que se realizo con exito )

2) lo ideal es que las demas clases clases no sepan de conexiones.. ni de bd, solo de algun objeto java que ya venga con los valores que devolvio la consulta.

3) Tener cuidado de no dejar conexiones abiertas, y siempre utilizar el bloque finally.

tratandose de bd cliente-servidor, las cosas cambian.

Mas que nada te recomiendo leer sobre beans...
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-

Última edición por calichecal; 23/11/2011 a las 16:52
  #3 (permalink)  
Antiguo 02/12/2011, 04:00
 
Fecha de Ingreso: octubre-2008
Mensajes: 30
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Duda básica MySQL + NetBeans

Muchas gracias por la extensa respuesta calichecal, me pongo con ello!


Etiquetas: mysql, netbeans, sql, 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 17:41.