Conector de mysql no me funciona con eclipse en ubuntu

Iniciado por Aikanáro Anário, 29 Noviembre 2011, 08:27 AM

0 Miembros y 1 Visitante están viendo este tema.

Aikanáro Anário

Ya antes había trabajo en ubuntu con eclipse, mysql y el conector, de hecho hace tan solo un par de semanas. Pero hoy resulta que cuando voy a crear la clase de conexión a la base de datos, no me funciona me da un null pointerException. No dice específicamente que es por eso, pero creo que sí porque aunque haya un error en la ruta de la base de datos o en la ruta para especifiar el driver, nada cambia y sigue dándome el nullPorinterException.

Mi clase conexión:
Código (java) [Seleccionar]

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JOptionPane;

public class ConexionBD {

public final static String driver = "com.mysql.jdbc.Driver"; //ruta donde se encuentra el driver importado al proyecto
public final static String bd = "jdbc:mysql://localhost:3306/BDAdminEventos"; //protocolo:servidorBD:direccion:puerto/nombreBD
public final static String usuario = "gustavo";
public final static String contrasena = "123";

Connection ct;
public Statement st;

public void ConexionBD() {
try {
Class.forName(driver); //Especifico el driver a usar
ct = DriverManager.getConnection(bd,usuario,contrasena); // hago la conexion usando el objeto Connection
st = ct.createStatement(); //creo el query
System.out.println("Conexion exitosa");
// JOptionPane.showMessageDialog(null, "Conexión Exitosa");
}
catch(Exception ex) {
// JOptionPane.showMessageDialog(null, "Conexión Fallida");
System.out.println("fallo");
ex.printStackTrace();
}
}

public void crearSentencia() {
try {
//objeto que tiene el resultado del query
ResultSet rs = st.executeQuery("Select * from Invitado"); //especifico el contenido del query al ejecutarlo
while(rs.next()) //mientras hayan resultados ...
System.out.println(rs.getString(1)); //imprime la celda 2 (nombre)
}
catch(Exception ex) {
ex.printStackTrace();
}
}
}


Clase main

Código (java) [Seleccionar]



public class Prueba {

public static void main(String[] args) {

ConexionBD conexion = new ConexionBD();
conexion.crearSentencia();

}

}


Me da nullPointerException en esta línea:
Código (java) [Seleccionar]
ResultSet rs = st.executeQuery("Select * from Invitado"); //especifico el contenido del query al ejecutarlo

No estoy muy seguro que sea por el conector, ya que tengo un proyecto que está funcionando bien, pero los otros no. Y me aseguré de agregar el conector en Propiedades del proyecto > java bulit path > add externar jar > agregar conector. ¿Qué está pasando?
Lo que faltaba en internet: http://binar10s.blogspot.com/

adastra

El objeto "st" es nulo.

Class.forName("com.mysql.jdbc.Driver").newInstance();

para instanciar correctamente el driver.

Aikanáro Anário

Lo que faltaba en internet: http://binar10s.blogspot.com/

adastra


adastra

Postea la traza de la excepción completa, creo que lo que te esta pasando es que no se puede establecer la conexión...  :-\

Aikanáro Anário

Esa es la traza de error completa:

Citarjava.lang.NullPointerException
   at ConexionBD.crearSentencia(ConexionBD.java:36)
   at Prueba.main(Prueba.java:9)
No hay nada mas.

La versión es la que hay ahora mismo en la página de mysql: Connector/J 5.1.18
Lo que faltaba en internet: http://binar10s.blogspot.com/

adastra

De acuerdo, el problema no esta en Statement ni en la conexión, esta en el ResultSet, la linea 36 es esta esto:

while(rs.next()) //mientras hayan resultados

indica que el ResultSet es nulo y que la consulta no se ha ejecutado correctamente. Verifica los siguientes puntos:

hay datos en la tabla?
"Invitado" es una tabla existente en BD?
es tabla o vista?
esta con la "I" mayuscula o con "i" en el esquema?
has intentado ejecutar otra consulta con una tabla distinta o contra el esquema por defecto de mysql?
puedes ejecutar un SHOW TABLES? que te retorna?

Para resumir, verifica que lo que estas intentando consultar existe y es valido en la BD.

Aikanáro Anário

#7
CitarDe acuerdo, el problema no esta en Statement ni en la conexión, esta en el ResultSet, la linea 36 es esta esto:

while(rs.next()) //mientras hayan resultados

La línea 36 es cuando le doy el valor al ResultSet, como lo contaste según lo que pegue parece que se me quedo una línea, pero eclipse me dice que es esta:
ResultSet rs = st.executeQuery("SELECT * FROM Invitado"); //especifico el contenido del query al ejecutarlo


Citarhay datos en la tabla?
Sí, hay varios invitados, con su nombre, apellido, direccion, etc.

"Invitado" es una tabla existente en BD?
Sí, así mismo como está escrita: primera letra en mayúscula, lo demás en minúscula y en sigular.

es tabla o vista?
No sé lo que es una vista, pero sé que es una tabla :P

esta con la "I" mayuscula o con "i" en el esquema?
Mayúscula

Citarhas intentado ejecutar otra consulta con una tabla distinta o contra el esquema por defecto de mysql?
Intenté con otra base de datos y pasa exactamente lo mismo. El mismo error, en la misma línea. No sé como seleccionar un esquema por defecto, bueno para hacer los querys en el mismo workbench lo que hago es darle doble clic, pero eso no cambia nada.

Citarpuedes ejecutar un SHOW TABLES? que te retorna?
No puedo pasa lo mismo:
Código (java) [Seleccionar]
ResultSet rs = st.executeQuery("SHOW TABLES");
while(rs.next())
System.out.println(rs.getString(1)); [code]
[/code]


Es muy raro.... porque tengo un proyecto con un programa que hace una llamada (ficticia) y la inserta en una base de datos y funciona correctamente. Y al proyecto con el que tengo el error ahora le especifiqué que use esa misma base de datos, le cambie el nombre de la tabla en el query, pero sigue con el mismo error... Y como dije he importado el driver de conexión al proyecto con el que tengo problemas, lo he eliminado y vuelto a importar varias veces y sigue con lo mismo. También me pasa con otro proyecto, o sea, con el único que funciona es con el de las llamadas.

Pero es ni siquiera la conexión se está estableciendo, porque le puse un print que si ejecuta el try{} entonces diga que la conexion es exitosa, pero no sale ni eso, tampoco sale que la conexión falló (que sería el cacth)

Tampoco importa si le pongo una contraseña o usuario erroneo para conectarse a la BD, me sigue dando el mismo erro, en la misma línea, es muy raro  :-\
Lo que faltaba en internet: http://binar10s.blogspot.com/

adastra

 :huh: Si que es raro... cambia de Driver a ver si depronto suena la flauta... que versión de MySQL tienes? intenta cambiar la tabla a minusculas todo, en PostgreSQL si que recuerdo tener un problema así, que no pillaba la tabla porque estaba en Mayusculas, pero vamos que ya son "palos de ciego" pero por probar, no se pierde nada...

Aikanáro Anário

#9
Acabo de encontrar el error, que error más pendejo.

Es que no había puesto constructor, bueno, cuando uno no pune constructor se crea uno por defecto, pero obviamente ese constructor no hacía nada, por eso me daba el mismo error siempre.

Si te fijas:
Código (java) [Seleccionar]
public void ConexionBD() {
try {
Class.forName(driver); //Especifico el driver a usar
ct = DriverManager.getConnection(bd,usuario,contraseña); // hago la conexion usando el objeto Connection
st = ct.createStatement(); //creo el query
System.out.println("Conexion exitosa");
// JOptionPane.showMessageDialog(null, "Conexión Exitosa");
}
catch(Exception ex) {
// JOptionPane.showMessageDialog(null, "Conexión Fallida");
System.out.println("fallo");
ex.printStackTrace();
}
}


En vez de crear el constructor, le puse void, o sea que por error lo que cree fue un método xD. Y no habría problemas si llamara ese método desde el main o desde la clase que lo quiero utilizar, pero como pensé que lo que tenía era un constructor, no lo estaba haciendo, y solo llamaba el método de crearSentencia. Ya está y funciona.

Gracias por la ayuda.
Lo que faltaba en internet: http://binar10s.blogspot.com/