[RESOLVIDO] Conexão entre SQL SERVER e JAVA através de JDBC não se sustenta após a primeira SQL ser acionada?

Estou desenvolvendo um simples sistema de agenda em JAVAFX, utilizando SQL SERVER 2012 Express e o sqljdbc42.jar como driver de conexão e o app compila e roda.

Faz a primeira consulta e me retorna a informação. Mas quando eu peço outra consulta, eu sempre recebo uma exception de volta, assim como segue:

Exception in thread "main" java.lang.NullPointerException at DAO.ContatoDAO.listAll(ContatoDAO.java:68) at Principal.Main.main(Main.java:44) C:\Users\difurlan.pd\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1 FALHA NA CONSTRUÇÃO (tempo total: 0 segundos)

A linha 68 do DAO é uma statment, assim como segue:

PreparedStatement stmt = 
     ConexaoMSSQL.getInstance().getConnection().prepareStatement(QUERY_LIST);

Minha SQL:

public static final String QUERY_LIST =
     "SELECT codigo, nome, numero, ref, isAtivo\n"
     + "  FROM contato;";

Como podem ver, o código chega a ser ridículo de simples. Mas alguma coisa está impedindo de haver uma segunda consulta, não importa se eu inverta a ordem das consultas, ou seja, se eu chamar a consulta acima em primeiro, o app retorna tranquilamente o resultado e me volta uma exception na segunda. Sempre na segunda.

Além de M.V.C. + DAO, também utilizo uma controladora Singleton para me garantir que apenas uma instância do objeto será criada, para facilitar a comunicação de informações entre as views.

Observação: Esse mesmo app funciona perfeitamente em um banco de dados POstGre, com a mesma prática de desenvolvimento (MVC+DAO+Singleton).

Alguém, por favor, poderia me auxiliar com esse problema?

1 curtida

Bom… O compilador ta lançando NullPointerException, você esta chamando um método em um objeto nulo.

Faz uns ifs para verificar o que esta nulo

if(ConexaoMSSQL.getInstance() == null){
    System.out.prinln("ConexaoMSSQL.getInstance() ta nulo");
}

Se o if não for executado, vai pro prox, testa o .getConnection.

Se possível também, posta a classe ConexaoMSSQL.

Eis a classe de conexão
/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    */
    package Banco;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*

  • @author Diogo
    */
    public class ConexaoMSSQL {

    private static ConexaoMSSQL conexao = null;
    private static Connection connection = null;
    private final String url;
    private final String portNumber = “1433”;
    private final String database = “AgendaWeb”;
    private final String host = “TITAN\TITAN_SQLEXPRESS”;
    private final String username = “user”;
    private final String password = “********”;

    private ConexaoMSSQL() {
    this.url = “jdbc:sqlserver://” + this.host + “:” +
    this.portNumber + “;databaseName=” + this.database
    + “;user=” + this.username + “;password=” + this.password + “;”;
    }

    public static synchronized ConexaoMSSQL getInstance() {
    if (conexao == null) {
    conexao = new ConexaoMSSQL();
    }
    return conexao;
    }

     public Connection getConnection() {
     if (connection == null) {
         try {
             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
             connection = DriverManager.getConnection(url);
         } catch (SQLException e) {
             System.out.println("\n>> Problema ao obter conexao\n");
    
         } catch (ClassNotFoundException ex) {
             Logger.getLogger(ConexaoMSSQL.class.getName()).log(Level.SEVERE, null, ex);
         }
         return connection;
     }
     return null;
    

    }

    public void closeConnection() {
    if (connection != null) {
    try {
    connection.close();
    } catch (SQLException e) {
    System.out.println("\n>> Problema ao fechar conexao\n");
    }
    }
    }

    @Override
    public void finalize() {
    closeConnection();
    }

}

Achei

A sua lógica esta assim:
Se conexao for nula, cria uma conexao nova e então retorna a conexao
Se conexao não for nula, retorna null

Solução:
Ao invés de retornar null, retorna connection

:clap::clap::clap::clap::clap:
Procurei a foto do troféu do oscar, mas nao dá pra anexar. Então vão as palmas msm.

Cara, muito obrigado.

Haha, obrigado, precisando… tamo ae.
Coloca [RESOLVIDO] no tópico e se possível considere marcar a minha resposta como Solução :+1: