Olá amigos do fórum. Hoje trago a seguinte questão:
Estou iniciando os estudos sobre conexões JAVA/Postgres. E me deparei com o seguinte problema:
Quando tento testar a minha classe chamada, “PoolDeConexoes”, ela me retorna os seguintes erros:
“Exception in thread “main” java.lang.NullPointerException
at BDAccess.PoolDeConexoes.(PoolDeConexoes.java:13)
at BDAccess.PoolDeConexoes.getInstance(PoolDeConexoes.java:21)
at BDAccess.Main.main(Main.java:9)”
Porém, a IDE não me exibe nenhum erro semântico durante a digitação, então, o mais provável é que se trata de um erro lógico.
Abaixo estão as minhas classes, todas comentadas com o devido processo do pool de conexões, nos moldes solicitados pelo meu professor.
package BDAccess;
import java.util.ArrayList;
public class PoolDeConexoes {
private static ArrayList<Conexao> conexoes;
private static PoolDeConexoes pool;
private PoolDeConexoes() {
Conexao cn1 = new Conexao();
Conexao cn2 = new Conexao();
conexoes.add(cn1);
conexoes.add(cn2);
getConexao();
}
public static PoolDeConexoes getInstance() {
if(pool == null) {
pool = new PoolDeConexoes();
}
return pool ;
}
public Conexao getConexao() {
if(conexoes == null) {
Conexao c = new Conexao();
conexoes.add(c);
return c;
}else {
for(Conexao s:conexoes) {
if(s.isLivre()) {
return s;
}
}
}
return null;
}
}
Acima, a classe denominada: PoolDeConexoes.java
package BDAccess;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class Conexao {
private Connection cnx;
private boolean livre;
public Conexao() {
this.livre = true;
Parametros prm = Parametros.getInstance();
String driverJDBC = prm.getParametros("driverJdbc");
String urlBanco = prm.getParametros("urlBanco");
String nomeUsuario = prm.getParametros("nomeUsuario");
String senha = prm.getParametros("senha");
try {
Class.forName(driverJDBC);
System.out.println("Driver importado!");
cnx = DriverManager.getConnection(urlBanco, nomeUsuario, senha);
System.out.println("Conexão estabelecida");
}catch (Exception e) {
System.out.println("Conexão não estabelecida!");
}
}
public Connection getConnection() {
return cnx;
}
public void reserva() {
if(livre) {
livre = false;
}else {
System.out.println("Esta conexão já está em uso!");
}
}
public void libera() {
livre = true;
}
public boolean isLivre() {
return livre;
}
}
Acima, a classe com o objeto Conexão.
package BDAccess;
import java.io.IOException;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException{
PoolDeConexoes plc = PoolDeConexoes.getInstance();
System.out.println(plc.getConexao());
}
}
E aqui o meu método principal.
Agradeço desde já pelo auxílio de vocês sobre a minha questão.