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

5 respostas Resolvido
daojdbcjavasqlservermvc
D

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?

5 Respostas

M

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.

D

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");
    
    }
    
    }
    
    }
    
    <a class="mention" href="/u/override">@Override</a>
    
    public void finalize() {
    
    closeConnection();
    
    }
    

}

M
Solucao aceita

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

D

: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.

M

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

Criado 25 de julho de 2018
Ultima resposta 25 de jul. de 2018
Respostas 5
Participantes 2