Problema al conectar con BD en varios métodos
Publicado por Sagra (2 intervenciones) el 16/07/2007 19:13:48
Hola,
estoy haciendo una aplicación de un videoclub que busca, da de alta nuevas y elimina películas y los mismo para socios, juegos y préstamos. Lo implemento de la siguiente forma: Tengo una clase AccesoaDatos que contiene todos los métodos de acceso a la Base de Datos. La clase y sus atributos es ésta
public class AccesoaDatos {
private ResultSet rs = null;
private Connection conn = null;
private Statement stmt = null;
private static String idioma;
/** Creates a new instance of AccesoaDatos */
public AccesoaDatos() {
}
...
hay un método conectar() que conecta a la BD y crea el Statement de la siguiente forma:
public void conectar() throws ClassNotFoundException{
try {
Class.forName("com.mysql.jdbc.Driver");
String jdbcUrl= "jdbc:mysql://localhost:3306/videoclub";
String user="root";
String password="8troncho";
String sql;
try {
conn = DriverManager.getConnection(jdbcUrl,user,password);
stmt = conn.createStatement();
} catch (SQLException ex) {
System.out.print("No se pudo conectar a la BD");
ex.printStackTrace();
}
} catch (ClassNotFoundException ex) {
System.out.print("No se pudo encontrar el Driver");
ex.printStackTrace();
}
}
y más adelante hay un método buscar para buscar la película o lo que sea:
public void buscar(String tabla, String campo, String valor){
String sql;
try {
sql="SELECT * FROM "+tabla+" WHERE "+campo+"="+ '\"'+valor+'\"';
System.out.println(sql); //HE PUESTO ESTA LINEA PARA VER QUE LA QUERY SE CAPTURA BIEN DESDE LOS TEXTFIELDS, Y SI LO HACE BIEN
this.rs = stmt.executeQuery(sql);
} catch (SQLException ex) {
System.out.print("Fallo en la ejecución de la consulta");
ex.printStackTrace();
}
}
El problema me da en este método, pues a pesar de que la query llega bien al executequery, a pesar de que hay conexión correcta a la BD, me da el error de NullPointerException:
...
Compiling 1 source file to C:\Documents and Settings\sagra\Videoclub\build\classes
compile:
run:
SELECT * FROM dvd WHERE genero="comedia"
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Paquete.AccesoaDatos.buscar(AccesoaDatos.java:146)
at Paquete.Pelicula.buscar(Pelicula.java:36)
at gui.GUISocios.BotonbuscarpelisActionPerformed(GUISocios.java:1193)
...
Me parece que el error puede estar en la declaración de los atributos de la clase, pero he probado a poner el stmt, conn y rs static se me cuelga la aplicación.
El problema lo tiene al poner la ejecución d ela consulta fuera del método conectar, pues si lo ponemos todo en el mismo método funciona a la perfección. Pero necesito que esté en métodos diferentes, pues el usuario debe poder buscar, insertar y elminar sin tener que crear una nueva conexión cada vez. ¿Es ese mi error? ¿Debo crear para cada query un nuevo Statement?
¿Alquien me puede ayudar por favor?
Gracias.
Saludos
estoy haciendo una aplicación de un videoclub que busca, da de alta nuevas y elimina películas y los mismo para socios, juegos y préstamos. Lo implemento de la siguiente forma: Tengo una clase AccesoaDatos que contiene todos los métodos de acceso a la Base de Datos. La clase y sus atributos es ésta
public class AccesoaDatos {
private ResultSet rs = null;
private Connection conn = null;
private Statement stmt = null;
private static String idioma;
/** Creates a new instance of AccesoaDatos */
public AccesoaDatos() {
}
...
hay un método conectar() que conecta a la BD y crea el Statement de la siguiente forma:
public void conectar() throws ClassNotFoundException{
try {
Class.forName("com.mysql.jdbc.Driver");
String jdbcUrl= "jdbc:mysql://localhost:3306/videoclub";
String user="root";
String password="8troncho";
String sql;
try {
conn = DriverManager.getConnection(jdbcUrl,user,password);
stmt = conn.createStatement();
} catch (SQLException ex) {
System.out.print("No se pudo conectar a la BD");
ex.printStackTrace();
}
} catch (ClassNotFoundException ex) {
System.out.print("No se pudo encontrar el Driver");
ex.printStackTrace();
}
}
y más adelante hay un método buscar para buscar la película o lo que sea:
public void buscar(String tabla, String campo, String valor){
String sql;
try {
sql="SELECT * FROM "+tabla+" WHERE "+campo+"="+ '\"'+valor+'\"';
System.out.println(sql); //HE PUESTO ESTA LINEA PARA VER QUE LA QUERY SE CAPTURA BIEN DESDE LOS TEXTFIELDS, Y SI LO HACE BIEN
this.rs = stmt.executeQuery(sql);
} catch (SQLException ex) {
System.out.print("Fallo en la ejecución de la consulta");
ex.printStackTrace();
}
}
El problema me da en este método, pues a pesar de que la query llega bien al executequery, a pesar de que hay conexión correcta a la BD, me da el error de NullPointerException:
...
Compiling 1 source file to C:\Documents and Settings\sagra\Videoclub\build\classes
compile:
run:
SELECT * FROM dvd WHERE genero="comedia"
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Paquete.AccesoaDatos.buscar(AccesoaDatos.java:146)
at Paquete.Pelicula.buscar(Pelicula.java:36)
at gui.GUISocios.BotonbuscarpelisActionPerformed(GUISocios.java:1193)
...
Me parece que el error puede estar en la declaración de los atributos de la clase, pero he probado a poner el stmt, conn y rs static se me cuelga la aplicación.
El problema lo tiene al poner la ejecución d ela consulta fuera del método conectar, pues si lo ponemos todo en el mismo método funciona a la perfección. Pero necesito que esté en métodos diferentes, pues el usuario debe poder buscar, insertar y elminar sin tener que crear una nueva conexión cada vez. ¿Es ese mi error? ¿Debo crear para cada query un nuevo Statement?
¿Alquien me puede ayudar por favor?
Gracias.
Saludos
Valora esta pregunta


0