Problema com NullpointerException num acesso JDBC

8 respostas
andre.obueno

Olá, estou com um problema aqui pra acessar um dado do meu banco de dados...

Segue o código onde crio a conexão com o banco:

public class Conexao {

    public static Connection getConnection() throws SQLException {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            return DriverManager.getConnection(
                    "jdbc:mysql://localhost/ingles", "root", "XXXX");
        } catch (ClassNotFoundException e) {
            throw new SQLException(e.getMessage());
        }
    }

Depois, estou criando um método pesquisa na minha classe DAO, segue o código:

public String pesquisa(Palavra palavra) throws SQLException {
        String palavra_port = "Errado";
        String sql = "SELECT portugues FROM palavras WHERE ingles = ?";
        PreparedStatement stmt = this.connection.prepareStatement(sql);
        stmt.setString(1, palavra.getIngles());
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {
            palavra_port = rs.getString("portugues");
        }
        return palavra_port;
    }
no meu main, crio um objeto dao, um objeto palavra, e mando pesquisar, segue o código:
public static void main(String[] args) throws SQLException {

        Palavra palavra = new Palavra();
        palavra.setPortugues(" ");
        palavra.setIngles("sky");

        // gera conexão!!!
        PalavraDAO dao = new PalavraDAO();

        //dao.insere(palavra);
        System.out.println(dao.pesquisa(palavra));
    }

Estou obtendo o seguinte erro:

run:
Exception in thread "main" java.lang.NullPointerException
at jogoingles.PalavraDAO.pesquisa(PalavraDAO.java:60)
at jogoingles.Main.main(Main.java:24)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

Gostaria de saber o que estou fazendo de errado, já pesquisei muito e não consegui solucionar este problema que parece não ser algo complicado.

desde já, obrigado,

André.

8 Respostas

nandolup

Fala ae cara blz?

no seu método pesquisar coloque esse código:

Connection connection = null;
try {
connection = Conexao.getConnection();
PreparedStatement stmt = connection.prepareStatement(sql);
} catch (Exception e) {
e.printStackTrace();
}

não esqueça de colocar o restante do código!!!

espero ter ajudado!!!

abraços…

A

Como você obtem o objeto connection?
Acho que o connection está nulo.

Pelo seu código você teria que fazer algo do tipo:

PreparedStatement stmt = getConnection().prepareStatement(sql);

Verifica o que tem na linha 60.
O que dá pra falar é que na linha 60 da classe PalavraDAO está fazendo alguma coisa com objeto nulo.

Tem que fechar o ResultSet, PreparedStatement e Connection.

andre.obueno

ah, foi mal, deixa eu colocar o construtor da classe DAO aqui... é nele que crio a conexao, e tenho uma variavel Connection já na classe DAO, olhem...

public class PalavraDAO {
    // a conexão com o banco de dados
    private Connection connection;

    public void PalavraDAO() throws SQLException {
        this.connection = Conexao.getConnection();
    }

o q tenho que fazer?

vlw

André.

A

Tem que postar o código completo para ver a linha do erro.
Na mensagem de erro está informando a linha 60

andre.obueno

Ok, aqui a classe DAO

package jogoingles;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *
 * @author Andre
 */
public class PalavraDAO {
    // a conexão com o banco de dados
    private Connection connection;

    public void PalavraDAO() throws SQLException {
        this.connection = Conexao.getConnection();
    }

    public void insere(Palavra palavra) throws SQLException {
        // prepared statement para inserção
        String sql = "INSERT INTO palavras(portugues, ingles) VALUES(?, ?)";
        PreparedStatement stmt = this.connection.prepareStatement(sql);

        // seta os valores
        stmt.setString(1, palavra.getPortugues());
        stmt.setString(2, palavra.getIngles());

        stmt.execute();
        stmt.close();
    }

    public void altera(Palavra palavra) throws SQLException {
        String sql = "UPDATE palavras SET palavra=?, ingles=? where portugues=? OR ingles=?";
        PreparedStatement stmt = connection.prepareStatement(sql);
        stmt.setString(1, palavra.getPortugues());
        stmt.setString(2, palavra.getIngles());
        stmt.setString(3, palavra.getPortugues());
        stmt.setString(4, palavra.getIngles());

        stmt.execute();
        stmt.close();
    }

    public void remove(Palavra palavra) throws SQLException {
        String sql = "DELETE FROM palavras WHERE portugues=? OR ingles=?";
        PreparedStatement stmt = connection.prepareStatement(sql);
        stmt.setString(1, palavra.getPortugues());
        stmt.setString(2, palavra.getIngles());
        stmt.execute();
        stmt.close();
    }

    public String pesquisa(Palavra palavra) throws SQLException {
        String palavra_port = "Errado";
        String sql = "SELECT portugues FROM palavras WHERE ingles = ?";
        PreparedStatement stmt = this.connection.prepareStatement(sql);
        stmt.setString(1, palavra.getIngles());
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {
            palavra_port = rs.getString("portugues");
        }
        return palavra_port;
    }
}

e a main:

package jogoingles;

import java.sql.SQLException;

/**
 *
 * @author André
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws SQLException {

        Palavra palavra = new Palavra();
       // palavra.setPortugues("navio");
        palavra.setIngles("sky");

        // gera conexão!!!
        PalavraDAO dao = new PalavraDAO();

        //dao.insere(palavra);
        System.out.println(dao.pesquisa(palavra));
    }
}

vlw

André

A

André, compila e executa novamente e manda a exceção, no primeiro post você informou a linha 60, mas olhando seu código na linha 60 está vazia.

Nessa parte do código você tem que contatenar ou criar uma lista de palavras, se for só um troque o while por if, e tem que fechar os objetos.

while (rs.next()) {  
    palavra_port = rs.getString("portugues");  
}
andre.obueno

ok, eu fechei os statement, só nao sei agora, onde devo fechar a conexao? ao término do programa?

segue o novo erro…

Exception in thread "main" java.lang.NullPointerException at jogoingles.PalavraDAO.pesquisa(PalavraDAO.java:57) at jogoingles.Main.main(Main.java:24) Java Result: 1

sao nessas linhas os erros ó:

linha 57: String sql = “SELECT portugues FROM palavras WHERE ingles = ?”;

linha 24: System.out.println(dao.pesquisa(palavra));

vlw

André.

A

André, olhando novamente seu código faça assim no método main, pois você engoliu a exception lançada e não dá pra saber onde que é.
Manda a exception novamente.

package jogoingles;  
   
import java.sql.SQLException;  
   
/** 
* 
* @author André 
*/  
public class Main {  
   
/** 
* @param args the command line arguments 
*/  
public static void main(String[] args) {  
  
    try{
        Palavra palavra = new Palavra();  
        palavra.setPortugues("navio");  
        palavra.setIngles("sky");  

        // gera conexão!!!  
        PalavraDAO dao = new PalavraDAO();  
   
        dao.insere(palavra);  
        System.out.println(dao.pesquisa(palavra));  
    }catch(Exception e){
        e.printStackTrace();
    }
}  
[code]
Criado 5 de dezembro de 2008
Ultima resposta 5 de dez. de 2008
Respostas 8
Participantes 3