JDBC

RaulC
11 de Diciembre del 2003
buenas, mi problema es que tengo 2 clases

la 1º es la clase donde creo el entorno grafico, y la 2º es donde establezco la conexion y hago todo lo que seria de jdbc, el problema es:

cuando intento pasar lo que obtengo de la bd, no se lo puedo pasar a la 1º clase para que me lo muestre,
he probado creando un objeto de la 1º clase en la 2º clase, le he pasado el objeto que creo de la 1º clase para que me inicialice el modo grafico a la 2º y tambien me da error, no de compilación, sino de ejecucion, lo que hago es llamar a unos metodos que he creado en la clase grafica con el objeto que le paso o creo pero ahi es donde me da el fallo... no se porque... lo que quiero es saber si puedo pasar unas String de la clase de jdbc a la grafica si habeis hecho algo similar o sabeis como podria hacerlo..... gracias

RaulC
11 de Diciembre del 2003
esto es a grosomodo lo que hago en la 1º

bd=new Basedatos("SELECT TOP 1 * FROM Persona", hei);
public void verDni(String DNI)
{
textDni.setText(DNI);
}

public void verNombre(String NOMBRE)
{
textNom.setText(NOMBRE);
}

public void verApellido(String APEL)
{
textApe.setText(APEL);
}

public void verDireccion(String DIREC)
{
textDir.setText(DIREC);
}

public void verEdad(String ED)
{
textEdad.setText(ED);
}

public void verEstado(String est)
{
if (est.compareTo("1")==0)
{
casado.setSelected(true);
}
else
{
soltero.setSelected(true);
}
}
esto es la 2º clase (Jdbc)
public class Basedatos
{

Basedatos(String query, GraficoSwing gs)
{
String url = "jdbc:odbc:Basededatos";
try
{

Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection (url);
checkForWarning (con.getWarnings ());
DatabaseMetaData dma = con.getMetaData ();
Statement stmt = con.createStatement ();
ResultSet rs = stmt.executeQuery (query);
dispResultSet (rs, gs);
rs.close();
stmt.close();
con.close();
}
catch (SQLException ex)
{
System.out.println ("n*** SQLException caught ***n");
while (ex != null)
{
System.out.println ("nSQLState: " +ex.getSQLState ());
System.out.println ("Message: " +ex.getMessage ());
System.out.println ("Vendor: " +ex.getErrorCode ());
ex = ex.getNextException ();
System.out.println ("");
}
}
catch (java.lang.Exception ex)
{
ex.printStackTrace ();
}

}

public static void dispResultSet (ResultSet rs, GraficoSwing gs)throws SQLException
{
ResultSetMetaData rsmd = rs.getMetaData ();
int numCols = rsmd.getColumnCount ();
boolean more=rs.next();
while(more)
{
for(int i=1;i<=numCols;i++)
{

if(i==1)
{
gs.verDni(rs.getString(i));
}
if(i==2)
{
gs.verNombre(rs.getString(i));
}
if(i==3)
{
gs.verApellido(rs.getString(i));
}
if(i==4)
{
gs.verDireccion(rs.getString(i));
}
if(i==5)
{
gs.verEdad(rs.getString(i));
}
if(i==6)
{
gs.verEstado(rs.getString(i));
}
}
more=rs.next();
}
}

private static boolean checkForWarning (SQLWarning warn)
throws SQLException
{
boolean rc = false;
if (warn != null)
{
System.out.println ("n *** Warning ***n");
rc = true;
}
return rc;
}
}

Heihachi
11 de Diciembre del 2003
Que excepción da?

Sólo se me ocurre que te de NullPointerException porque:
1) No has iniciado aún la variable hei
o
2) No has iniciado los textField

Saludos!

Marco
11 de Diciembre del 2003
Está un poquito complicado entender lo que tienes es posible me envies el codigo de ejmplo para ver si lo trato de ejecutar y ayudarte?

Saludos

Marco

RaulC
11 de Diciembre del 2003
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.border.*;
import java.io.*;
import java.net.URL;
import java.sql.*;


public class GraficoSwing extends JFrame
{

Vector vec=new Vector();
String raula=new String();
//Basedatos bd;

JFrame fraPrin;

JTextField textNom;
JTextField textApe;
JTextField textDir;
JTextField textEdad;
JTextField textDni;

JButton busca;
ButtonGroup bg;
JCheckBox soltero;
JCheckBox casado;

JLabel la;

void Limpiar()
{
textNom.setText("");
textDni.setText("");
textApe.setText("");
textDir.setText("");
textEdad.setText("");
soltero.setSelected(false);
casado.setSelected(true);
}

void iniciar()
{

fraPrin=new JFrame("EJERCICIO DE SWING");
fraPrin.setResizable(false);

JPanel pCentral=new JPanel();
JPanel pCentral2=new JPanel();
JPanel pCentral3= new JPanel();
JPanel pDerecha=new JPanel();
JPanel pIzquierda = new JPanel();
JPanel pInferior = new JPanel();
JPanel pSuperior = new JPanel();

textNom=new JTextField();
textApe=new JTextField();
textDir=new JTextField();
textEdad=new JTextField();
textDni=new JTextField();

busca=new JButton("Buscar");
bg=new ButtonGroup();
soltero=new JCheckBox("Soltero",false);
casado=new JCheckBox("Casado",true);

JMenuBar jMenu=new JMenuBar();
JMenu archivo=new JMenu("Archivo");
JMenu edicion=new JMenu("Edicion");
JMenuItem insertar=new JMenuItem("Insertar");
JMenuItem cer=new JMenuItem("Cerrar");
JMenuItem buscar=new JMenuItem("Buscar");
archivo.add(cer);
archivo.add(insertar);
edicion.add(buscar);
jMenu.add(archivo);
jMenu.add(edicion);


String nom=new String();

la=new JLabel(new ImageIcon("Peazo tetas.jpg"));
Dimension dime= new Dimension(100,800);

bg.add(soltero);//botones
bg.add(casado);//botones
pCentral2.add(soltero);
pCentral2.add(casado);
pCentral3.add(new JLabel("DNI"));
pCentral3.add(textDni);
pCentral3.add(new JLabel("Nombre"));
pCentral3.add(textNom);
pCentral3.add(new JLabel("Apellido"));
pCentral3.add(textApe);
pCentral3.add(new JLabel("Edad"));
pCentral3.add(textEdad);
pCentral3.add(new JLabel("Direccion"));
pCentral3.add(textDir);
pCentral.add(pCentral3);
pCentral.add(pCentral2);
textNom.setSize(dime);

pCentral2.setBorder(new TitledBorder("Estado Civil"));
pCentral2.setLayout(new GridLayout(1,2));
pCentral3.setBorder(BorderFactory.createEmptyBorder(30, 30, 10, 30));
pCentral3.setLayout(new GridLayout(5,2));
pCentral.setBorder(BorderFactory.createEmptyBorder(30,30,10,30));
pCentral.setLayout(new GridLayout(2,1));

busca.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e)
{ventana(); Limpiar();}});
buscar.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e)
{ventana();Limpiar();}});
fraPrin.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e)
{System.exit(0);}});
cer.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e)
{System.exit(0);}});

fraPrin.setJMenuBar(jMenu);
fraPrin.getContentPane().add(pCentral,BorderLayout.CENTER);
fraPrin.pack();
fraPrin.setVisible(true);

}

public void Buscar(String d)
{

}

public void dibujar(int c)
{

}

public void ventana()
{
final JFrame jf=new JFrame("Busqueda");
JPanel jp=new JPanel();
JLabel jl=new JLabel("Introduce el nombre a buscar");
final JTextField jt=new JTextField();
JButton jb=new JButton("Buscar");
JButton jc=new JButton("Cancelar");
jp.setBorder(BorderFactory.createEmptyBorder(30, 30, 10, 30));
jp.setLayout(new GridLayout(2,2));
jp.add(jl);
jp.add(jt);
jp.add(jb);
jp.add(jc);
jf.getContentPane().add(jp,BorderLayout.CENTER);
jb.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e)
{final String bus=new String(jt.getText()); raula=bus; System.out.println(raula);jf.dispose(); Buscar(raula); }});
jc.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e)
{jf.dispose();}});

jf.pack();
jf.setVisible(true);
}

public void error()
{
final JFrame jf=new JFrame("Busqueda");
JPanel jp=new JPanel();
JLabel jl=new JLabel("NO EXISTE");
JButton jc=new JButton("Aceptar");
jp.add(jl);
jp.add(jc);
jf.getContentPane().add(jp,BorderLayout.CENTER);
jc.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e)
{jf.dispose();}});

jf.pack();
jf.setVisible(true);
}

public void verDni(String DNI)
{
textDni.setText(DNI);
}

public void verNombre(String NOMBRE)
{
textNom.setText(NOMBRE);
}

public void verApellido(String APEL)
{
textApe.setText(APEL);
}

public void verDireccion(String DIREC)
{
textDir.setText(DIREC);
}

public void verEdad(String ED)
{
textEdad.setText(ED);
}

public void verEstado(String est)
{
if (est.compareTo("1")==0)
{
casado.setSelected(true);
}
else
{
soltero.setSelected(true);
}
}



}

esta es la clase grafica

import java.net.URL;
import java.sql.*;

public class Basedatos extends GraficoSwing
{

Basedatos(String query)
{
String url = "jdbc:odbc:Basededatos";
try
{

Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection (url);
checkForWarning (con.getWarnings ());
DatabaseMetaData dma = con.getMetaData ();
Statement stmt = con.createStatement ();
ResultSet rs = stmt.executeQuery (query);
dispResultSet (rs);
rs.close();
stmt.close();
con.close();
}
catch (SQLException ex)
{
System.out.println ("n*** SQLException caught ***n");
while (ex != null)
{
System.out.println ("nSQLState: " +ex.getSQLState ());
System.out.println ("Message: " +ex.getMessage ());
System.out.println ("Vendor: " +ex.getErrorCode ());
ex = ex.getNextException ();
System.out.println ("");
}
}
catch (java.lang.Exception ex)
{
ex.printStackTrace ();
}

}

public void dispResultSet (ResultSet rs)throws SQLException
{
ResultSetMetaData rsmd = rs.getMetaData ();
int numCols = rsmd.getColumnCount ();
boolean more=rs.next();
while(more)
{
for(int i=1;i<=numCols;i++)
{

if(i==1)
{
verDni(rs.getString(i));
}
if(i==2)
{
verNombre(rs.getString(i));
}
if(i==3)
{
verApellido(rs.getString(i));
}
if(i==4)
{
verDireccion(rs.getString(i));
}
if(i==5)
{
verEdad(rs.getString(i));
}
if(i==6)
{
verEstado(rs.getString(i));
}
}
more=rs.next();
}
}

private static boolean checkForWarning (SQLWarning warn)
throws SQLException
{
boolean rc = false;
if (warn != null)
{
System.out.println ("n *** Warning ***n");
rc = true;
}
return rc;
}

public static void main(String a[])
{
GraficoSwing hei=new GraficoSwing();
hei.iniciar();
String que=new String("SELECT TOP 1 * FROM Persona");
Basedatos bd=new Basedatos(que);
}
}

esta es la de la conexion a la bd....

supongo que lo vereis claro....

gracias

Heihachi
11 de Diciembre del 2003
Hola,

heredar de la clase GraficoSwing no es el buen camino...

Cuando lo hacías como public static void dispResultSet (ResultSet rs, GraficoSwing gs)throws SQLException
iba mejor encaminado.

Al heredar lo que consigues es que la clase Basedatos tenga sus propios JTextFields y el error se debe a que aún no se han iniciado (deberías haber llamado a baseDatos.iniciar() para que se iniciaran)

De todos modos eso no arregla nada, porque los textfield a los que haces referencia en la clase Basedatos no son los de GraficoSwing

Saludos!

RaulC
11 de Diciembre del 2003
muchas gracias!

RaulC
11 de Diciembre del 2003
Lo he podido arreglar, ya funciona!!!! muchas gracias, no habia caido en la herencia (joer... parezco nuevo....)

si quereis el codigo os lo paso, decir algo si es asi