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

[SOLUCIONADO] Error nullpointer al hacer una consulta SQL (ORACLE)

Estas en el tema de Error nullpointer al hacer una consulta SQL (ORACLE) en el foro de Java en Foros del Web. Buenas noches compañeros, me ha surgido un problema que no entiendo porque se produce y es que, al conectar todo va bien y muy correcto, ...
  #1 (permalink)  
Antiguo 16/09/2014, 14:56
 
Fecha de Ingreso: julio-2014
Ubicación: España
Mensajes: 83
Antigüedad: 9 años, 8 meses
Puntos: 2
Error nullpointer al hacer una consulta SQL (ORACLE)

Buenas noches compañeros, me ha surgido un problema que no entiendo porque se produce y es que, al conectar todo va bien y muy correcto, pero a la hora de, cuando yo pulso a un botón y le meto unos datos en un JTextfield, se realiza una consulta desde otra clase que me tiene que devolver un JOptionPane con un mensaje de error personalizado...el problema es que me salta este error.

Pongo el código:
Código PHP:
        btnBuscar = new JButton("BUSCAR");
        
btnBuscar.addActionListener(new ActionListener() {
            public 
void actionPerformed(ActionEvent e) {
                
String MP codigoMP.getText().toString();
                
System.out.println(MP);
                try {
                    
objConex.buscarCMP(MP);
                } catch (
SQLException e1) {
                    
// TODO Auto-generated catch block
                    
e1.printStackTrace();
                }
            }
        });
        
btnBuscar.setBounds(233399123);
        
getContentPane().add(btnBuscar); 
El error me da justo donde poner "objConex.buscarCMP(MP);

El tema es que, si en el main, le pongo en vez que llame a la clase desde donde voy a mostrar un panel para que este me envíe la consulta, le pongo esto:

Código PHP:
   LISTAR = new JButton("VER PIEZAS EN STOCK");
    
LISTAR.addActionListener(new ActionListener() {
        public 
void actionPerformed(ActionEvent arg0) {
            
String codMP JOptionPane.showInputDialog("Ingrese el id");
            try {
                
objConex.buscarCMP(codMP);
            } catch (
SQLException e) {
                
// TODO Auto-generated catch block
                
e.printStackTrace();
            }
        }
    });
    
LISTAR.setBounds(101116442);
    
getContentPane().add(LISTAR); 
Me funciona sin problemas...y no lo entiendo...

Y luego en esta parte también:
Código PHP:
    public ResultSet buscarCMP(String mpthrows SQLException {
        try {
            
stm conex.createStatement();
            
String cadSQL "";
            
System.out.println(mp);
            
cadSQL "SELECT * FROM MATERIAPRIMA WHERE CODMP = '" mp "'";
            
rs stm.executeQuery(cadSQL);
            if (!
rs.next()) {
                
JOptionPane.showMessageDialog(null"No existe tal registro");
            } else {
                return 
rs;
            }
        } catch (
SQLException e) {
            
e.printStackTrace();
        } 
finally {
            
//stm.close();
        
}
        return 
null;
    } 
El error me lo dá justo donde pone "stm = conex.createStatement();"

¿Alguna idea?

Última edición por yesod91; 16/09/2014 a las 18:39
  #2 (permalink)  
Antiguo 17/09/2014, 00:33
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

Cita:
Iniciado por yesod91 Ver Mensaje
..el problema es que me salta este error.

[...]

El error me lo dá justo donde pone "stm = conex.createStatement();"
Y cual es el error?
  #3 (permalink)  
Antiguo 17/09/2014, 03:43
 
Fecha de Ingreso: julio-2014
Ubicación: España
Mensajes: 83
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

Cita:
Iniciado por Profesor_Falken Ver Mensaje
Y cual es el error?
Los errores estan citados mas abajo...me da como nullpointer en esas lineas que pongo después del código...
  #4 (permalink)  
Antiguo 17/09/2014, 04:09
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

Cita:
Iniciado por yesod91 Ver Mensaje
Los errores estan citados mas abajo...me da como nullpointer en esas lineas que pongo después del código...
Yo creo que está bastante obvio. En los fragmentos de código que has puesto, estas usando dos objetos "conex" y "objConex" suponiendo que ya estan instanciados. Y cuando se programa es mejor no presuponer cosas y más de objetos que no son creados de forma local en la función.

Si en ambas funciones hicieses

Código Java:
Ver original
  1. if (conex!=null) {
  2.  
  3. // codigo de la funcion
  4.  
  5. }

y

Código Java:
Ver original
  1. if (objConex!=null) {
  2.  
  3. // codigo de la funcion
  4.  
  5. }


Es posible que te llevases alguna sorpresa ;)
__________________
Aviso: No se resuelven dudas por MP!
  #5 (permalink)  
Antiguo 17/09/2014, 04:45
 
Fecha de Ingreso: julio-2014
Ubicación: España
Mensajes: 83
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

La instancia de objconex, es la clase conexionDB...

La instancia conex, la uso en la clase conexionDB para "conex = DriverManager.getConnection(url, user, pass);

El problema es que tengo esto:

Código PHP:
public class ConexionDB {
    
String user;
    
String pass;
    
String url;
    static 
Connection conex;
    static 
Statement stm;
    static 
ResultSet rs;

    public 
ConexionDB() {
        
user "alumno";
        
pass "alumno";
        
url "jdbc:oracle:thin:@PCVIRTUAL:1521:BASE";
        
conex null;
        
stm null;
    }

    public 
void conectar() {
        try {
            Class.
forName("oracle.jdbc.OracleDriver").newInstance();
            
conex DriverManager.getConnection(urluserpass);
            
JOptionPane.showMessageDialog(null"Conexion realizada con éxito");
        } catch (
Exception e) {
            
JOptionPane.showMessageDialog(null"Conexion fallida");
            
JOptionPane.showInputDialog(enull);
        }
    } 
Código PHP:
    public ResultSet LeerDatosDB() throws SQLException {
        try {
            
stm conex.createStatement();
            
String cadSql "";
            
cadSql "SELECT * FROM PRODUCTOS ORDER BY id";
            
rs stm.executeQuery(cadSql);
        } catch (
SQLException ex) {
            
Logger.getLogger(ConexionDB.class.getName()).log(Level.SEVERE,
                    
nullex);
        } 
finally {
            
// stm.close();
        
}
        return 
rs;
    } 
Es lo que no entiendo, porque esto si funciona e hice lo mismo, en el botón que puse:

Código PHP:
LISTAR = new JButton("VER PIEZAS EN STOCK");
        
LISTAR.addActionListener(new ActionListener() {
            public 
void actionPerformed(ActionEvent e) {
                try {
                    
DefaultTableModel dfm = new DefaultTableModel();
                    
MenuGUI.tbl.setModel(dfm);
                    
dfm.setColumnIdentifiers(new Object[] { "FECHA RECEPCIÓN",
                            
"ALBARÁN""PARTE RECEPCIÓN""LOTE",
                            
"CANTIDAD ENTRADA""CANTIDAD SALIDA""FORMATO",
                            
"STOCK" });
                    
rs objConex.LeerDatosDB();
                    try {

                        while (
rs.next()) {
                            
dfm.addRow(new Object[] { 
                                    
rs.getDate("FRECEPCION"),
                                    
rs.getInt("ALBARAN"),
                                    
rs.getString("PRECEPCION"),
                                    
rs.getString("LOTE"),
                                    
rs.getString("CENTRADA"),
                                    
rs.getString("CSALIDA"),
                                    
rs.getString("FORMATO"),
                                    
rs.getString("STOCK") });

                        }
                    } 
finally {
                        
rs.close();
                    }
                } catch (
SQLException e1) {
                    
// TODO Auto-generated catch block
                    
e1.printStackTrace();
                }
            }
            
/*public void actionPerformed(ActionEvent arg0) {
                //String codMP = JOptionPane.showInputDialog("Introduzca el código de Materia Prima");
                VerCMP.main(null);
                /*try {
                    
                    //objConex.buscarCMP(codMP);
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }*/
        
});
        
LISTAR.setBounds(101116442);
        
getContentPane().add(LISTAR); 
Cuando yo puse aqui directamente "objConex.LeerdatosDB();" funciona correctamente...

PD: Conectar la aplicación, lo hace sin problemas...

Última edición por yesod91; 17/09/2014 a las 04:55 Razón: Completar código
  #6 (permalink)  
Antiguo 17/09/2014, 04:56
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

Buenas,

Si te da el nullpointer en esas lineas, entonces es que tanto conex como objectconex son null en ese momento, como te ha indicado Malenko.

Habria que ver por que no se ha inicializado la conexion.

Puedes poner el codigo completo para que podamos reproducirlo?


Un saludo
  #7 (permalink)  
Antiguo 17/09/2014, 05:01
 
Fecha de Ingreso: julio-2014
Ubicación: España
Mensajes: 83
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

Clase conexiónDB

Código PHP:
public class ConexionDB {
    
String user;
    
String pass;
    
String url;
    static 
Connection conex;
    static 
Statement stm;
    static 
ResultSet rs;

    public 
ConexionDB() {
        
user "alumno";
        
pass "alumno";
        
url "jdbc:oracle:thin:@PCVIRTUAL:1521:BASE";
        
conex null;
        
stm null;
    }

    public 
void conectar() {
        try {
            Class.
forName("oracle.jdbc.OracleDriver").newInstance();
            
conex DriverManager.getConnection(urluserpass);
            
JOptionPane.showMessageDialog(null"Conexion realizada con éxito");
        } catch (
Exception e) {
            
JOptionPane.showMessageDialog(null"Conexion fallida");
            
JOptionPane.showInputDialog(enull);
        }
    }

    public 
ResultSet LeerDatosDB() throws SQLException {
        try {
            
stm conex.createStatement();
            
String cadSql "";
            
cadSql "SELECT * FROM PRODUCTOS ORDER BY id";
            
rs stm.executeQuery(cadSql);
        } catch (
SQLException ex) {
            
Logger.getLogger(ConexionDB.class.getName()).log(Level.SEVERE,
                    
nullex);
        } 
finally {
            
// stm.close();
        
}
        return 
rs;
    }

    public 
ResultSet buscarCMP(String mpthrows SQLException {
        try {
            
stm conex.createStatement();
            
String cadSQL "";
            
System.out.println(mp);
            
cadSQL "SELECT * FROM MATERIAPRIMA WHERE CODMP = '" mp "'";
            
rs stm.executeQuery(cadSQL);
            if (!
rs.next()) {
                
JOptionPane.showMessageDialog(null"No existe tal registro");
                
VerCMP.codigoMP.setText("");
            } else {
                
//return rs;
            
}
        } catch (
SQLException e) {
            
e.printStackTrace();
            
JOptionPane.showMessageDialog(null"No existe tal registro");
        } 
finally {
            
//stm.close();
        
}
        return 
rs;
    } 
Clase MenuGUI

Código PHP:
LISTAR = new JButton("VER PIEZAS EN STOCK");
        
LISTAR.addActionListener(new ActionListener() {
            public 
void actionPerformed(ActionEvent arg0) {
                
VerCMP.main(null);
                
/*String codMP = JOptionPane.showInputDialog("Introduzca el código de Materia Prima");
                try {
                    objConex.buscarCMP(codMP);
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }*/
            
}
        });
        
LISTAR.setBounds(101116442);
        
getContentPane().add(LISTAR); 
Clase: VerCMP

Código PHP:
public class VerCMP extends JFrame {

    
/**
     * 
     */
    
private static final long serialVersionUID 1L;
    public static 
JTextField codigoMP;
    private 
JButton btnBuscar;
    
ConexionDB objConex = new ConexionDB();
    
ResultSet rs;


    
/**
     * Launch the application.
     */
    
public static void main(String[] args) {
        
EventQueue.invokeLater(new Runnable() {
            public 
void run() {
                try {
                    
VerCMP frame = new VerCMP();
                    
frame.setVisible(true);
                } catch (
Exception e) {
                    
e.printStackTrace();
                }
            }
        });
    }

    
/**
     * Create the frame.
     */
    
public VerCMP() {
        
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
setBounds(100100342144);
        
getContentPane().setLayout(null);
        
        
codigoMP = new JTextField();
        
codigoMP.setText("Introduce Código de Materia Prima");
        
codigoMP.setBounds(104021320);
        
getContentPane().add(codigoMP);
        
codigoMP.setColumns(10);
        
        
btnBuscar = new JButton("BUSCAR");
        
btnBuscar.addActionListener(new ActionListener() {
            public 
void actionPerformed(ActionEvent arg0) {
                
String codMPcodigoMP.getText();
                try {
                    
objConex.buscarCMP(codMP);
                } catch (
SQLException e) {
                    
// TODO Auto-generated catch block
                    
e.printStackTrace();
                }
            }
        });
        
btnBuscar.setBounds(233399123);
        
getContentPane().add(btnBuscar); 
  #8 (permalink)  
Antiguo 17/09/2014, 05:02
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

Y cuando llamas al metodo conectar() ?

Haces un

ConexionDB objConex = new ConexionDB();

Pero nunca llamas a conectar(), por lo que conex siempre esta a null.
  #9 (permalink)  
Antiguo 17/09/2014, 05:17
 
Fecha de Ingreso: julio-2014
Ubicación: España
Mensajes: 83
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

Pero entonces porque si pongo un JOptionPane en el MenuGUI, para hacer la misma función, funciona...

EDITO: Ya he dado con el problema con eso me has dicho, el problema es que en la clase VerCMP, no tengo en ningún momento instanciado objConex.conectar();

Ahora me ha surgido otra pregunta, ¿Como hago para que, mediante una SOLA instancia conectar, pueda hacer que todas las instancias gráficas esten conectas con una sola conexión?

Última edición por yesod91; 17/09/2014 a las 05:38
  #10 (permalink)  
Antiguo 17/09/2014, 06:17
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

Buenas,

Normalmente en aplicaciones de escritorio efectivamente se abre una conexion al arrancar el programa y no se cierra hasta que cerremos el programa.

Para hacer esto sin tocar mucho tu codigo, te bastaria con meter el codigo de conexion() dentro del constructor de ConextionDB y crear un metodo desconectar()

Código Java:
Ver original
  1. public class ConexionDB {
  2.     String user;
  3.     String pass;
  4.     String url;
  5.     static Connection conex;
  6.     static Statement stm;
  7.     static ResultSet rs;
  8.  
  9.     public ConexionDB() {
  10.         user = "alumno";
  11.         pass = "alumno";
  12.         url = "jdbc:oracle:thin:@PCVIRTUAL:1521:BASE";
  13.         conex = null;
  14.         stm = null;
  15.  
  16.  try {
  17.             Class.forName("oracle.jdbc.OracleDriver").newInstance();
  18.             conex = DriverManager.getConnection(url, user, pass);
  19.             JOptionPane.showMessageDialog(null, "Conexion realizada con éxito");
  20.         } catch (Exception e) {
  21.             JOptionPane.showMessageDialog(null, "Conexion fallida");
  22.             JOptionPane.showInputDialog(e, null);
  23.         }
  24.     }
  25.  
  26.     public void desconectar() {
  27.        if (!conex.isClosed()) {
  28.          conex.close();
  29. }
  30.     }
  31. [...]


Despues puedes utilizar este desconectar con un evento windowsclosing. Podrias ponerlo en tu main, justo antes de hacer el setVisible:

Código Java:
Ver original
  1. frame.addWindowListener(new WindowAdapter() {
  2.  
  3. @Override
  4.  
  5. public void windowClosing(WindowEvent e) {
  6.     conex.desconectar();
  7.     System.exit(0);
  8.  
  9. }
  10.  
  11.   });

Un saludo
  #11 (permalink)  
Antiguo 17/09/2014, 06:25
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

No se si tiene algo que ver pero diria que tienes un BUG bastante gordo en la clase ConexionDB.

Tanto LeerDatosDB como buscarCMP devuelven una variable estática de la clase que no tiene porque haber recibido valor en dichas funciones.

Es decir, si llamo a LeerDatosDB y funciona correctamente, almacenará en la variable "rs" ciertos registros. Si luego llamamos a buscarCMP y la función falla, devolverá el mensaje de "No hay registros" pero devolverá el ResultSet "rs" con los valores de la anterior llamada a LeerDatosDB.
__________________
Aviso: No se resuelven dudas por MP!
  #12 (permalink)  
Antiguo 17/09/2014, 06:39
 
Fecha de Ingreso: julio-2014
Ubicación: España
Mensajes: 83
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

Cita:
Iniciado por Malenko Ver Mensaje
No se si tiene algo que ver pero diria que tienes un BUG bastante gordo en la clase ConexionDB.

Tanto LeerDatosDB como buscarCMP devuelven una variable estática de la clase que no tiene porque haber recibido valor en dichas funciones.

Es decir, si llamo a LeerDatosDB y funciona correctamente, almacenará en la variable "rs" ciertos registros. Si luego llamamos a buscarCMP y la función falla, devolverá el mensaje de "No hay registros" pero devolverá el ResultSet "rs" con los valores de la anterior llamada a LeerDatosDB.
Tienes toda la razón, lo que pasa, que he cogido parte del código de otra aplicación que estoy actualmente modifcando para que cumpla la función que necesito...tengo algunas que he hecho ahora y otras de otra aplicación que hice. Perdona por la confusión.
  #13 (permalink)  
Antiguo 17/09/2014, 06:44
 
Fecha de Ingreso: julio-2014
Ubicación: España
Mensajes: 83
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

Cita:
Iniciado por Profesor_Falken Ver Mensaje
Buenas,

Normalmente en aplicaciones de escritorio efectivamente se abre una conexion al arrancar el programa y no se cierra hasta que cerremos el programa.

Para hacer esto sin tocar mucho tu codigo, te bastaria con meter el codigo de conexion() dentro del constructor de ConextionDB y crear un metodo desconectar()

Código Java:
Ver original
  1. public class ConexionDB {
  2.     String user;
  3.     String pass;
  4.     String url;
  5.     static Connection conex;
  6.     static Statement stm;
  7.     static ResultSet rs;
  8.  
  9.     public ConexionDB() {
  10.         user = "alumno";
  11.         pass = "alumno";
  12.         url = "jdbc:oracle:thin:@PCVIRTUAL:1521:BASE";
  13.         conex = null;
  14.         stm = null;
  15.  
  16.  try {
  17.             Class.forName("oracle.jdbc.OracleDriver").newInstance();
  18.             conex = DriverManager.getConnection(url, user, pass);
  19.             JOptionPane.showMessageDialog(null, "Conexion realizada con éxito");
  20.         } catch (Exception e) {
  21.             JOptionPane.showMessageDialog(null, "Conexion fallida");
  22.             JOptionPane.showInputDialog(e, null);
  23.         }
  24.     }
  25.  
  26.     public void desconectar() {
  27.        if (!conex.isClosed()) {
  28.          conex.close();
  29. }
  30.     }
  31. [...]


Despues puedes utilizar este desconectar con un evento windowsclosing. Podrias ponerlo en tu main, justo antes de hacer el setVisible:

Código Java:
Ver original
  1. frame.addWindowListener(new WindowAdapter() {
  2.  
  3. @Override
  4.  
  5. public void windowClosing(WindowEvent e) {
  6.     conex.desconectar();
  7.     System.exit(0);
  8.  
  9. }
  10.  
  11.   });

Un saludo
Y con esto, ¿Podría se mantendría la instancia de conexión a la base de datos aun cuando inicie otra instancia gráfica dentro del main?
  #14 (permalink)  
Antiguo 17/09/2014, 07:23
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

Cita:
Y con esto, ¿Podría se mantendría la instancia de conexión a la base de datos aun cuando inicie otra instancia gráfica dentro del main?
Para ello deberas declarar la instancia de ConexionDB como estatica y global a la aplicacion.
  #15 (permalink)  
Antiguo 17/09/2014, 07:38
 
Fecha de Ingreso: julio-2014
Ubicación: España
Mensajes: 83
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

¿Lo de global como es?
  #16 (permalink)  
Antiguo 17/09/2014, 08:18
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

public static ConexionDB objConex = new ConexionDB();
  #17 (permalink)  
Antiguo 17/09/2014, 08:38
 
Fecha de Ingreso: julio-2014
Ubicación: España
Mensajes: 83
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

Vale, hice eso, pero...no me funciona para la función que busco, es decir, una vez se conecte la aplicación las demás ventanas que aparezcan dentro de la propia, siguen en null...

Estoy buscando solo conectar una vez la aplicación y luego desde cualquier ventana que yo pueda instanciar desde dentro del main, que pueda acceder a las consultas de base de datos sin tener que volver a poner objConex.conectar();
  #18 (permalink)  
Antiguo 17/09/2014, 09:49
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

Porque dices que no funciona?

Una variable public static persiste en la JVM y es accesible desde cualquier otra clase. Una vez instanciada no tienes que volver a llamar a conectar.
A lo mejor es que nunca llamas a conectar?
No te habia dicho mas arriba que tenias que quitar el metodo conectar?
  #19 (permalink)  
Antiguo 17/09/2014, 09:55
 
Fecha de Ingreso: julio-2014
Ubicación: España
Mensajes: 83
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

Vale si! Perdoname, es que no lei bien lo que me pusiste arriba :D

Gracias tu tiempo, voy a ver si consigo que no me salgan tantos mensajes de "Conexión realizada con éxito".

De veras, muchas gracias a todos por vuestra ayuda :D

PD: Lo que me estoy dando cuenta es que al poner la referencia estatica, cada clase llama a conectar, entonces ya estoy haciendo conexiones de sobra, lo que quiero o busco es solo llamar 1 vez a conectar y que la conexión se mantenga para poder realizar todas las consultas que yo quiera hasta que cierre el programa...

No se si me explico...lo que busco es; enciendo el programa (conecto), le doy a cualquier y sin tener que volver a llamar a conectar como tal, que pueda realizar las consultar.

Última edición por yesod91; 17/09/2014 a las 10:02
  #20 (permalink)  
Antiguo 17/09/2014, 11:32
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

Una variable global se declara una vez en el programa y es accesible desde cualquier parte de este.
Acaso has declarado la variable en cada ventana?

Lo normal es que el punto de entrada de tu programa lo tengas en una clase específica y que desde ahí lances todos tus frames. Por ejemplo:

Código Java:
Ver original
  1. public class MyApp {
  2.  
  3. public static ConexionDB objConex = new ConexionDB();
  4.  
  5. public static void main(String args[]) {
  6.         /* Create and display the form */
  7.         java.awt.EventQueue.invokeLater(new Runnable() {
  8.             @Override
  9.             public void run() {
  10.                 new VerCMP().setVisible(true);
  11.                 //Lanzar aqui los demas frames
  12.             }
  13.         });
  14. }
  15.  
  16. }


Luego para acceder a la conexión desde cualquier clase solo tendrias que hacer:

MyApp.objConex.loquesea()


Un saludo
  #21 (permalink)  
Antiguo 17/09/2014, 11:50
 
Fecha de Ingreso: julio-2014
Ubicación: España
Mensajes: 83
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

Es que no se si no nos entendemos o estamos diciendo lo mismo con diferentes palabras xDD

A ver, intentaré explicarme mejor...

1- Ejecuto la aplicación y conecto a la vez.
2- Desde esta aplicación ejecuto las otras instancias.
3- Instancio la clase para objConex
4- Realizo consultas desde otros JFrames.

Lo que intento es tratar de no tener que llamar a conectar desde todas las clases, es decir, que desde la principal ya se quede la conexión abiertas para otras posibles consultas...desde otra clase, simplemente llamar a sus respectivos métodos para realizar las consultas sin tener que abrir cada vez que ejecuto un JFrame diferente una conexión a la base de datos.

Espero que me entiendas...es que no puedo estar llamando a conectar en cada clase ya sea de forma automática simplemente desde la clase ConexionDB o llamando a Conectar().
  #22 (permalink)  
Antiguo 17/09/2014, 12:25
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

Buenas,

Si, te he entendido desde el principio.
Si lees con atención mi último post, lo que trato es precisamente de explicarte como conseguirlo.

Tienes que declarar el objeto de conexión SOLO en la clase MyApp. Después ese objeto estará accesible desde cualquiera de los frames haciendo MyApp.objConex.
Se crearía así UNA sola conexión, que puede ser utilizada desde cualquier parte del programa.

Si lo declaras en cada frame (que es lo que entiendo que estás haciendo ahora mismo) entonces estás creando una conexión por frame. NO hagas eso. Hazlo como te comento en el último post.


Un saludo
  #23 (permalink)  
Antiguo 17/09/2014, 12:48
 
Fecha de Ingreso: julio-2014
Ubicación: España
Mensajes: 83
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: Error nullpointer al hacer una consulta SQL (ORACLE)

Vale! Tal y como me has dicho mas arriba, he copiado linea a linea variando lo que me hacía falta.

A ver que resultado da :D

Muchas gracias por tu tiempo :)

PD: Si, lo que estaba haciendo era declararlo en cada JFrame, ahora lo tengo por hilos (cada JFrame) y la conexión va como me has puesto.

Reitero mil gracias :D

Última edición por yesod91; 17/09/2014 a las 13:31

Etiquetas: clase, jtextfield, sql, string
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 18:50.