JDBC - Erro

5 respostas
T

Fala galera!
Tô com um pequeno problema aqui:
Criei um package contendo uma classe A que utilizo para conectar ao banco de dados. A mesma possui um método que retorna um objeto do tipo Connection, que desejo instanciar na classe B. Até aí tudo bem, porém, quando tento criar um Statement utilizando a conexão gerada na classe A, é retornado uma NullPointerException.
É mais ou menos assim:

Classe A:

... 
  public Connection conexao(){ 
      return conexaoGerada; 
  }

e na Classe B

... 
   Connection conn = classeConexao.conexao(); 
   Statement stmt = conn.createStatement();

Mas quando compilar a classe B, é retornado o erro java.lang.NullPointerException na linha do Statement.

Será que alguém já passou por isso? Poderiam me ajudar?
Desde já agradeço.

5 Respostas

leonardom

Toti,

Na classe A você está setando o atributo conexaoGerada com a conexão?

Coloca a classe A inteira que fica mais fácil descobrir.

B

É que a classe conexao não está retornando a conexão, mas sim um valor null

Gustavo GUilherme BacK

T

é exatamente o que o Gustavo Guilherme postou. Segue o código da classe A, que na realidade se chama ConexaoSQL.

/**
 * Criado em 10/11/2003
 **/

package br.com.simpress.dtsCorporate;

import java.sql.*;

/**
 * Classe para conexão com a base SQL Server
 * @author Vinicius Soares Batista
 **/
public class ConexaoSQL extends Object{
	
	//Declaração das variáveis
	private Connection conSQL;
	private boolean blErro = false;
	private String msgErro;
	private String servidor;
	private String porta;
	private String usuario;
	private String senha;
	
	/**
	 * Classe para a conexão com a base de dados. Para abrir a conexão, 
	 * <b>deverá</b> ser invocado o método <b>AbreConexao()</b>
	 * @author Vinicius Soares Batista
	 * @param servidor Servidor que será acessado
	 * @param porta Porta onde será realizada a conexão
	 * @param usuario Usuário válido na base
	 * @param senha Senha válida na base
	 * @see AbreConexao()
	 **/
	public ConexaoSQL(String servidor, String porta, String usuario, String senha){
		SetServidor(servidor);
		SetPorta(porta);
		SetUsuario(usuario);
		SetSenha(senha);
	}
	
	/**
	 * Define o servidor a ser acessado
	 * @author Vinicius Soares Batista
	 * @param servidor nome ou IP do servidor
	 **/
	public void SetServidor(String servidor){
		this.servidor = servidor;
	}
	
	/**
	 * Define a porta onde será realizada a conexão(default:1433)
	 * @author Vinicius Soares Batista
	 * @param porta numero da porta onde será realizada a conexão
	 */
	public void SetPorta(String porta){
		this.porta = porta;
	}
	
	/**
	 * Define o usuário de acesso à base
	 * @author Vinicius Soares Batista
	 * @param usuario usuário válido na base 
	 **/
	public void SetUsuario(String usuario){
		this.usuario = usuario;
	}
	
	/**
	 * Senha para acesso ao banco
	 * @author Vinicius Soares Batista
	 * @param senha senha válida ao banco
	 **/
	public void SetSenha(String senha){
		this.senha = senha;
	}
	
	/**
	 * Método interno para abertura da conexão com o banco. É utilizado pelo método público abreConexao.
	 * @author Vinicius Soares Batista
	 * @see AbreConexao()
	 **/
	private void Conecta(){
		try{
			Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
			Connection conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://"+servidor+":"+porta, usuario, senha);
		}

		//tratamento de erros
		//Classe não encontrada
		catch(ClassNotFoundException e){
			msgErro = "Classe não encontrada 
"+e.getMessage();
			blErro = true;
		}
		
		//Exceção SQL
		catch(SQLException SQLEx){
			msgErro = "Ocorreu um erro ao acessar o banco! 
"+SQLEx.getMessage();
			blErro = true;
		}
	}
	
	/**
	 * Método para trazer um objeto do tipo Connection, contendo a conexão da base. Utiliza o método interno Conecta()
	 * @return Um objeto do tipo Connection, contendo a conexão com a base de dados
	 * @author Vinicius Soares Batista
	 **/
	public Connection AbreConexao(){
		Conecta();
		return conSQL;
	}

	/**
	 * Verifica se ocorreram ou não erros
	 * @return Uma variável boolena, indicando ou não a presença de erros 
	 * @author Vinicius Soares Batista
	 **/
	public boolean GetErro(){
		return blErro;
	}

	/**
	 * Mensagem gerada em caso de erros
	 * @return String, contendo a mensagem de erro gerada
	 * @author Vinicius Soares Batista
	 **/
	public String GetMensagemErro(){
		return msgErro;
	}
}

Só para complementar, aqui está o código da classe B, que na realidade se chama TesteConexaoSQL:

import br.com.simpress.dtsCorporate.ConexaoSQL;
import java.sql.*;

public class TesteConexaoSQL {
	public static void main(String args[]){
		ConexaoSQL app = new ConexaoSQL("10.10.1.1", "1433", "toti", "senha");
		Connection conn = app.AbreConexao(); 
		
		try{
			Statement st = conn.createStatement();
		}
		catch(SQLException e){
			System.out.println("Erro ao criar statement:" +e.getMessage());
		}
		catch(NullPointerException e){
			System.out.println("Erro de NullPointerException");
		}
	}
}

Já n sei mais o que fazer. Qualquer ajuda será válida. Valeu galera!

leonardom

Toti,

No seu metódo Conecta() da classe ConexaoSQL, troque a linha:

Connection conn = DriverManager.getConnection(“jdbc:Micro$oft:sqlserver://”+servidor+":"+porta, usuario, senha);

por:

Connection conSQL = DriverManager.getConnection(“jdbc:Micro$oft:sqlserver://”+servidor+":"+porta, usuario, senha);

T

Leonardo,
troquei conforme vc sugeriu(puta errinho feio neh?), mas mesmo assim, o método tah retornando Null.
Vc tem alguma outra sugestão? não sei mais o que fazer…
obrigado à todos pela ajuda prestada.
[]'s

Criado 14 de novembro de 2003
Ultima resposta 14 de nov. de 2003
Respostas 5
Participantes 3