Erro Excutesq AJUDA

16 respostas
java
A
Sou iniciante e não consigo fazer uma meu executaSql funcionar, segue abaixo o erro:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at conexoes.Conecta_Banco.executaSql(Conecta_Banco.java:73)
	at Views.Cargo.viewCargo.preencherTabela(viewCargo.java:241)
	at Views.Cargo.viewCargo.<init>(viewCargo.java:34)
	at Autenticacao.ViewiPrincipal.jmiCargosActionPerformed(ViewiPrincipal.java:655)
	at Autenticacao.ViewiPrincipal.access$700(ViewiPrincipal.java:44)
	at Autenticacao.ViewiPrincipal$8.actionPerformed(ViewiPrincipal.java:295)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
	at java.awt.Component.processMouseEvent(Component.java:6533)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)


**SEGUE O CODGO ABAIXO:**

public class Conecta_Banco {

    public Statement stmt;
    public ResultSet rs;
    public Statement statement;
    public ResultSet resultSet;
    private String driver = "org.postgresql.Driver";
    private String caminho = "jdbc:postgresql://localhost:5432/escola"; //"jdbc:postgresql://192.168.1.110:5432/escola";
    private String usuario = "postgres";
    private String senha = "17072010";
    public Connection conn;

    //iniciando os objetos
    public Conecta_Banco() {
        this.rs = rs;
        this.stmt = stmt;
        this.conn = conn;
    }

    //abre conexão com o banco
    public void abreConexao() {
        try {
            System.setProperty("jdbc.Drivers", driver);
            setConn(DriverManager.getConnection(caminho, usuario, senha));
            //JOptionPane.showMessageDialog(null, "Conectado com sucesso!");
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro ao conectar!" + ex.getMessage());
            //Logger.getLogger(ConexaoSCI.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    //fecha conexão com o banco
    public void fechaConexao() {
        try {
            getConn().close();
            //JOptionPane.showMessageDialog(null,"banco fechado");
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Não foi possivel " + "fechar o banco de dados: " + ex.getMessage());
        }
    }

    public boolean executarSQL(String pSQL) {
        try {
            //createStatement de con para criar o Statement
            this.setStatement(getConn().createStatement());

            // Definido o Statement, executamos a query no banco de dados
            this.setResultSet(getStatement().executeQuery(pSQL));

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
            //ex.printStackTrace();
            return false;
        }
        return true;
    }

    public void executaSql(String sql) {
        try {
            stmt = conn.createStatement(rs.TYPE_SCROLL_SENSITIVE, rs.CONCUR_READ_ONLY);
            rs = stmt.executeQuery(sql);
        } catch (SQLException ex) {
            //JOptionPane.showMessageDialog(null,"Não foi possível "+ "executar o comando sql,"+ex+", o sql passado foi "+sql);
        }
    }

    public int insertSQL(String pSQL) {
        int status = 0;
        try {
            //createStatement de con para criar o Statement
            this.setStatement(conn.createStatement());

            // Definido o Statement, executamos a query no banco de dados
            this.statement.executeUpdate(pSQL);

            //consulta o ultimo id inserido
            this.setResultSet(this.getStatement().executeQuery("SELECT MAX(id_disciplina) FROM tb_disciplina"));

            //recupera o ultimo id inserido
            while (this.resultSet.next()) {
                status = this.resultSet.getInt(1);
            }

            //retorna o ultimo id inserido
            return status;
        } catch (SQLException ex) {
            ex.printStackTrace();
            return status;
        }
    }
}

POR FAVOR PRECISO DE AJUDA.

16 Respostas

D

Qual é a linha 73 da classe Conecta_Banco

P.S.: Segundo as boas práticas e convenções do Java, especificamente, a JavaBeans, os nomes de classes não devem ser separados por _. Este caractere só será visto em constantes

public static final String UMA_CONSTANTE = "";

Mas, classes, atributos, métodos e parâmetros, jamais.

A

Obrigada vou alterar e testar, sou iniciante.

D

Vai alterar o que? O nome não é o problema. É uma questão de estética.
Agora, a linha 73 da classe Conecta_Banco é que é a causa do problema.

A
**A linha 73  é esta:** stmt = conn.createStatement(rs.TYPE_SCROLL_SENSITIVE, rs.CONCUR_READ_ONLY);

Pertence a este método abaixo:

public void executaSql(String sql) {
        try {
            stmt = conn.createStatement(rs.TYPE_SCROLL_SENSITIVE, rs.CONCUR_READ_ONLY);
            rs = stmt.executeQuery(sql);
        } catch (SQLException ex) {
            //JOptionPane.showMessageDialog(null,"Não foi possível "+ "executar o comando sql,"+ex+", o sql passado foi "+sql);
        }
    }
A

Não consegui identificar o problema com esta linha.
Você pode me dar uma luz?

S

Você esqueceu de inicializar o objeto conn e além disso está tentando acessar um membro do objeto rs, que só é inicializado na linha seguinte.

A

Vou verificar

D

Então, fera, de que material você tirou isso?
De qualquer forma, o erro NullPointerException diz que alguma coisa está nula aí.
Creio eu que:

  • Ou é o objeto conn
  • Ou é o objeto rs
  • Ou ambos

Por que?
Veja:

Aqui você diz que inicializa os objetos, mas isso

this.rs = rs

Não é instanciar.

Reveja o material de estudo, assim identificará possíveis erros.
Se tiver igual, manda aqui no fórum que damos um help

A

Então não tirei de material, comecei a fazer este projeto, encima do conhecimento ja adquirido.
Estou tentando listar as informações do banco postgres na minha tabela, quando executo aparece este erro.

D

Então procure um material para estudo.
Veja, você fez isso

public Conecta_Banco() {
this.rs = rs;

Como você não passou parâmetros ao método, é o mesmo que fazer

this.rs = this.rs

Entendeu?

D

Ah, sim, a razão para questionar de onde tirou isso é que, dias atrás, vi a mesma estrutura de criação do statement.
Eu nunca uso assim, então, isso me chamou a atenção.

A

Poderia me dar o exemplo de como você usa statement?

D

Eu utilizo PreparedStatement e a criação do mesmo é assim

PreparedStatement pstm = connection.prepareStatement("SELECT BLA, BLA1, BLA2 FROM TABLE WHERE BLA = ?");
pstm.setString(1, "abc");
pstm.execute();
A

ah, ok, entendi.
Tambem utilizo assom quando estou criando minhas classes de controller, ok muito brigado.

J

ola gente nao consigo resolver essas questao quer poder resolver irar mim ajudar muito porfavor

1 - Imagine que tenho uma classe Carro e quero garantir que só existe um objeto desse tipo em
toda a memória. Não existe uma palavra chave especial para isto em java, então teremos de fazer
nossa classe de tal maneira que ela respeite essa nossa necessidade. Como fazer isso? (Dica: usando uma variável static e colocar a restrição no construtor) e na linguagem java

D

O certo seria você abrir um tópico isolado, mas ok.
Pesquise por singleton (teve até um exemplo desses, dias atrás).

Criado 8 de junho de 2018
Ultima resposta 11 de jun. de 2018
Respostas 16
Participantes 4