Erro conexão com PostgreSQL

6 respostas
J

Olá! estou testando uma conexão Java bem simples a uma tabela chamada teste do PostgreSQL, mas um erro tá me tirando o sono. Será q alguém conhece esse erro?

O erro é o seguinte:
Exception in thread “main” java.lang.NullPointerException at Conexao.main(Conexao.java:28)

E o código segue abaixo:

import java.sql.*;
import java.io.*;

public class Conexao {

static Connection con = null;
static Statement stm = null;
static ResultSet rs = null;

public Conexao() {
try {
Class.forName("org.postgresql.Driver");
con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/teste, root , acesso ");
stm = con.createStatement();
}
catch (Exception e) {
System.out.println(e);
}

}
public static void main(String args[]) throws SQLException {
try {
rs = stm.executeQuery("select * from indicador");
if(rs.next()) {
while(rs.next()){
System.out.println(rs.getInt("codigo"));
System.out.println(rs.getString("nome"));
System.out.println(rs.getString("descricao"));
}
}
}
catch(SQLException e) {
System.out.println("Não foi possível conectar com o banco "+ e);
}

System.exit(0);
}
}

6 Respostas

Rafael_Steil

Voce esta conectado da forma errada. Ao inves de

DriverManager.getConnection("jdbc:postgresql://localhost:5432/teste, root , acesso ");

vc tem que fazer

DriverManager.getConnection("jdbc:postgresql://localhost:5432/teste", "root", "acesso");

Alem disso, vc nao criou uma instancia da classe, logo o objeto Connection nem o Statement foram iniciados. Logo main(), faca

Conexao c = new Conexao();

Fora isso, um outro bug eh a parte

if(rs.next()) {
 while(rs.next()){

quando vc chama rs.next(), o sistema ja vai apontar para o registro. Da maneira como esta atualmente, vc vai comecar a ler os dados somente a partir do segundo registro, por causa do while(). Uma solucao seria remover o if() e fazer direto while(rs.next()), uo entao mudar o while por um do-while.

E, por fim, vc nao esta fechando o resultset, nem o statement e nem a connection. Use o metodo close(), comecando pelo ResultSet, deopis pelo Statement e entao pela Connection.

Rafael

J

Já realizei as modificações, mas continua dando o mesmo erro quando tento executar:
[b]Exception in thread “main” java.lang.NullPointerException at Conexao.main :roll:

Rafael_Steil

Bom, alguma coisa vc ainda esta fazendo errado. Se voce nao conseguir mesmo resolver o problema, coloque o codigo modificado aqui no forum de novo (formatado, por favor, para facilitar a leitura).

Rafael

J

Agora cái sempre na exceção de Falha na conexão: java.lang.ClassNotFounException: org.postgresql.Driver

Eis o código

import java.sql.*;
import java.io.*; 

public class Conexaot { 

   static Connection con; 
   
   
   public Conexaot() {
   	String url = "jdbc:postgresql://localhost:5432/teste";
	String username = "root";
	String senha = "acesso"; 
   	try { 
        	Class.forName("org.postgresql.Driver"); 
        	con = DriverManager.getConnection(url, username, senha); 
        	   
   	} 
   	catch (ClassNotFoundException cnfex) { 
        	System.err.println("Falha na conexão do driver");
		cnfex.printStackTrace(); 
		System.exit(1); //termina o programa
   	} 
	catch (SQLException sqlex) {
		System.out.println("Incapaz de conectar");
		sqlex.printStackTrace();
	}
	
	pegaTabela();
   }
   
   private void pegaTabela() {
   	Statement stm; 
	ResultSet rs;
	
	try {
		String query = "select * from indicador";
		stm = con.createStatement();
   		rs = stm.executeQuery(query);
		mostraDados(rs);
		stm.close();		
	}
	catch(SQLException sqlex) {
		sqlex.printStackTrace();
	}	

   
   }
   
   private void mostraDados(ResultSet rs) throws SQLException {
   	//posiciona para o primeiro registro
	boolean maisRegis = rs.next();
	
	// se não houver registros, exibe uma mensagem
	if(!maisRegis) {
		System.out.println("Não há registros");
	}
	while(maisRegis){
		System.out.println(rs.getInt("codigo"));
		System.out.println(rs.getString("nome"));
		System.out.println(rs.getString("descricao"));
	}
	
   } 
   
   public void finalizar() {
   	try {
		con.close();
	}
	catch (SQLException sqlex) {
		System.err.println("Incapaz de disconectar");
		sqlex.printStackTrace();
	}
   }
   
   public static void main(String args[]) {
	
	final Conexaot app = new Conexaot();
	
	app.finalizar();
	
	System.exit(0);
   } 
}
Rafael_Steil

Por favor, nao poste a mesma mensagem em diversos lugares diferentes.

Voce esta tendo este novo problema pq nao tem o driver jdbc do postgresql no seu classpath. Eis uma maneira de resolver:

Considerando que vc esta usando windows e executando via linha de comando, faca a chamada ao programa passando o caminho completo ao .JAR do PostgreSQL, como no exemplo abaixo:

java -cp .;c:\path\do\jar\do\postgresql.jar Conexao

Nao esqueca que eh “ponto ponto-e-virgula” antes do c:…

Rafael

J

Rafael Steil,
Obrigada pelas dicas, o programa ainda não tá funcionando, mas vc aumentou as possibilidades de ele dar certo. Agora, com o que aprendi vou poder ajudar a quem precisa.

Criado 6 de março de 2005
Ultima resposta 7 de mar. de 2005
Respostas 6
Participantes 2