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

¿Cómo se trabaja con una base de datos?

Estas en el tema de ¿Cómo se trabaja con una base de datos? en el foro de Java en Foros del Web. Hola, tengo la duda de como trabajar en Java con una base de datos. Por el momento, todas las pruebas que hice, he mantenido la ...
  #1 (permalink)  
Antiguo 06/01/2006, 06:43
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Información ¿Cómo se trabaja con una base de datos?

Hola, tengo la duda de como trabajar en Java con una base de datos.
Por el momento, todas las pruebas que hice, he mantenido la conexion abierta. es decir por ejemplo: realizo una consulta a una tabla, genero un modelo para una jTable y le asigno el modelo obtenido a partir del ResultSet. Bien la cuestion es que si tengo los datos en memoria, no tengo necesidad de mantener abierta la conexión, ahora si resulta que voy a realizar frecuentes modificaciones o inserciones en la base de datos, entonces no sería preferible mantener abierta la conexión?

Y otra cosa, como puedo hacer para (algo así como en Delphi) para tener un modulo de datos, es decir, mantener una única conexión y todo lo relacionado con esta en un único lugar. Por el momento tengo una clase Conexion, en ésta he definido los metodos que acceden a la base de datos y retornan un modelo (DefaultTableModel), pero como mi proyecto tiene mas de un "formulario" en el cual mostrar datos, he tenido que instanciar la clase Conexion mas de una vez!!!

Soluciones???

Gracias.
  #2 (permalink)  
Antiguo 06/01/2006, 16:11
Avatar de Mephisto  
Fecha de Ingreso: enero-2006
Ubicación: Mexico DF
Mensajes: 184
Antigüedad: 18 años, 4 meses
Puntos: 3
Para lo primero puedes checar lo que esta en el FAQ del foro en la pregunta de trabajo con BD en MySQL en la cual se abre la conexion con

Conexion = DriverManager.getConnection(BdUrl,BdUser,BdPsw);

y la terminas con

Conexion.close();

Para lo segundo, puedes generar una funcion en los subformularios que te permita la recepcion de los parametros de la conexion a la BD de tal forma que no tengas que estarte conectando a cada rato y se los mandas por referencia

Ex:

Connection Con;
boolean getParam(Connection Con){
ConAux = Con;
}
__________________
Saludos...

Todos somos sabios, solo que en diferentes disciplinas...
  #3 (permalink)  
Antiguo 11/01/2006, 08:48
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Bien esto ultimo es lo que necesito, para no tener que perder tiempo reconectandome a la base de datos.

Me sugieres que use parametros por referencia, es decir desde el form principal, que conoce la myconexion (Asi se llama mi clase que realiza la conexion con la base de datos, y todas las consultas sql). a los demas form que voy invocando?

Pero aun no vi como se pasa un parametro por referencia, estoy estudiandolo pero tenia esta idea

Esto en mi clase principal

...
private Conexion myconexion;
...

Cuando preciono sobre un boton, llama a otro formulario, yo hice que el constructor de ese nuevo formulario tenga un parametro que sea la conexion.
invoco al form nuevo asi

nuevoForm nuevo = new nuevoForm(myconexion);
nuevoForm.setModal(true);
nuevoForm.setVisible(true);

y despues en tomo los datos de la conexion que necesite en nuevoForm.

Pero tengo un error, PUNTERO NULO. estoy estudiandolo.

Podrias enviarme algun detalle mas sobre lo que me sugeriste anteriormente, y sobre lo que estoy haciendo...

Gracias
  #4 (permalink)  
Antiguo 12/01/2006, 08:55
Avatar de Mephisto  
Fecha de Ingreso: enero-2006
Ubicación: Mexico DF
Mensajes: 184
Antigüedad: 18 años, 4 meses
Puntos: 3
Perdon por el retraso, he estado algo ocupado en mi trabajo.

Tengo algo parecido a lo que estas haciendo, espero tre sirva...

//AQUI DEFINO LO QUE SE REFIERE A LA CONEXION Y UN OBJETO DE TIPO FRAME QUE ES LA OTRA VENTANA

public class BDMain extends javax.swing.JFrame {

//Inicializa valores para la conexion a la BD
Connection Conexion;
Statement Sentencia;
ResultSet Resultado;
static String Driver = "sun.jdbc.odbc.JdbcOdbcDriver";
static String BdNombre = "Proyecto";
static String BdUrl = "jdbc:odbc:"+BdNombre;
static String BdUser = "";
static String BdPsw = "";

//Declaracion de la ventana de apoyo
DatosEmp Emp = new DatosEmp();
...


//ESTA ES LA FUNCION QUE PARA MI CASO ESTA EN UN MENU EN LA CUAL
//REALIZO LA CONEXION A LA BASE DE DATOS

private void jConectarActionPerformed(java.awt.event.ActionEven t evt) {
// TODO add your handling code here:
try{
Class.forName(Driver).newInstance();
Conexion = DriverManager.getConnection(BdUrl,BdUser,BdPsw);
Sentencia = Conexion.createStatement();
jMessages.setText("Conexion a la BD exitosa");
}
catch(Exception e){
jMessages.setText(e.getMessage());
}
}

//ESTA FUNCION ESTA SE REFIERE A OTRO ELEMNTO DEL MENU EL QUE
//LLAMO A LA OTRA VENTANA. SE LE MANDAN LAS VARIABLES DEFINIDAS
private void jBuscaEmpActionPerformed(java.awt.event.ActionEven t evt) {
// TODO add your handling code here:
Emp.RecibeCon(Conexion, Sentencia, Resultado);
Emp.show();
}

//////////////////////////////////////////
// EN EL CODIGO DE LA OTRA FRAME

//DEFINO VARIABLES EN LAS QUE SE ALMACENARAN LOS DATOS DE LA
//CONEXION
public class DatosEmp extends javax.swing.JFrame {

Connection Conexion;
Statement Sentencia;
ResultSet Resultado;
...

//DEFINO LA FUNCION QUE RECIBE LOS DATOS DE LA CONEXION
public void RecibeCon(Connection c, Statement st,ResultSet rs){

Conexion = c;
Sentencia = st;
Resultado = rs;

}

// FINALMENTE EJECUTO UNA TRANSACCION Y PEGO LOS DATOS EN CAMPOS
private void formWindowActivated(java.awt.event.WindowEvent evt) {
// TODO add your handling code here:
try {
// Se realiza la consulta
Resultado = Sentencia.executeQuery( "SELECT Nombre,Ap_Paterno,Ap_Materno "+
"FROM Id_Emp");

//Muestra el primer resultado de la consulta
if(Resultado.next())
{
jNombre.setText(Resultado.getString("Nombre"));
jPaterno.setText(Resultado.getString("Ap_Paterno") );
jMaterno.setText(Resultado.getString("Ap_Materno") );

}
else
{
//Messages.setText("La consulta envio una tabla vacia");
}

} catch( SQLException e ) {
}
catch(Exception e){
}


}
__________________
Saludos...

Todos somos sabios, solo que en diferentes disciplinas...
  #5 (permalink)  
Antiguo 17/01/2006, 10:50
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Gracias. Por casualidad sabes como realizar un join que involucra tablas de digamos dos bases de datos, cada una correspondiente a una conexion distinta?

Gracias
  #6 (permalink)  
Antiguo 19/01/2006, 10:41
Avatar de Mephisto  
Fecha de Ingreso: enero-2006
Ubicación: Mexico DF
Mensajes: 184
Antigüedad: 18 años, 4 meses
Puntos: 3
Creo que eso no se puede hacer desde el DBMS, pero en java hice una pequeña aplicacion que trabaja con dos conexiones a bases de datos diferentes. La idea es generar dos ODBC y el codigo que viene arriba lo duplicas en la misma aplicacion. De ahí genero el siguiente codigo

private void formWindowActivated(java.awt.event.WindowEvent evt) {
// TODO add your handling code here:
String aux = new String();
i=0;
try {
// Se realiza la consulta
Resultado = Sentencia.executeQuery( "SELECT RFC_Empl,Nombre,Ap_Paterno,Ap_Materno "+
"FROM Id_Emp");

//Messages.setText("Consulta realizada correctamente");
//Muestra el primer resultado de la consulta
while(Resultado.next()){
jNombre.setText(Resultado.getString("Nombre"));
jPaterno.setText(Resultado.getString("Ap_Paterno") );
jMaterno.setText(Resultado.getString("Ap_Materno") );
aux=Resultado.getString("RFC_Empl");

Resultado2= Sentencia2.executeQuery("SELECT * "+
"FROM Ventas");
while(Resultado2.next()){

if(aux.equals(Resultado2.getString("RFC_Empl"))){
jResultado.setValueAt(jNombre.getText(), i, 0);
jResultado.setValueAt(jPaterno.getText(), i, 1);
jResultado.setValueAt(Resultado2.getString("Venta" ), i, 2);
i++;
}
}
}

} catch( SQLException e ) {
jMessages.setText(e.getMessage());
}
catch(Exception e){
jMessages.setText(e.getMessage());
}


}

Como ves, las tablas de la difernte base de datos tienen el campo RFC_Emp como el comun y mediante el cual hago el enlace de la informacion. Algo similar a un Join...
__________________
Saludos...

Todos somos sabios, solo que en diferentes disciplinas...
  #7 (permalink)  
Antiguo 20/01/2006, 05:03
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Perfecto. eso es lo que hice.

Gracias.
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 09:22.