Problemas na conexão com BD usando uma classe que gerencia a conexão e um Crud Generico [Resolvido]

5 respostas
charles.eduardo

Pessoal estou tendo um problema que não estou conseguindo resolver, para vocês pode ser simples mais para mim está um
quebra cabeça daqueles. Estou usando o BD H2 e tento ler um arquivo de txt,cvs e gravar no BD fui testar a conexão e travei ali msm!

Tenho um arquivo de propriedades para o BD:

database.proprierties

jdbc.driver = org.h2.Driver
# jdbc.url = jdbc:h2:tcp://localhost//db/BD_ENDERECOS
jdbc.url=jdbc:h2:tcp://localhost//db/BD_ENDERECOS
jdbc.username = charles.eduardo
jdbc.password = charles

Para o pacote de Implementação da Persistencia na camada de persistencia tenho:

a classe gerenciadora de conexão

package br.com.edesignerbrasil.persistencia.impl;

import br.com.edesignerbrasil.execao.EdesignerBrasilException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

class GerenciadorDeConexao {

    private static String driver;
    private static String url;
    private static String usuario;
    private static String senha;

    //Metodo para iniciar a conexão
    private static void init() throws EdesignerBrasilException {

        Properties properties = new Properties();
        FileInputStream arquivoDePropriedades = null;

        try {
            arquivoDePropriedades = new FileInputStream("database.properties");
            properties.load(arquivoDePropriedades);

            driver = properties.getProperty("jbdc.driver");
            url = properties.getProperty("jbdc.url");
            usuario = properties.getProperty("jbdc.usuario");
            senha = properties.getProperty("jbdc.senha");

            [b]Class.forName(driver)[/b];
            
        } catch (FileNotFoundException e) {
            StringBuilder mensagem = new StringBuilder("Não foi possivel se"
                    + "conectar ao banco de dados.");

            mensagem.append("\n Motivo.:").append(e.getMessage());
                throw new EdesignerBrasilException(mensagem.toString());

        } catch (IOException e) {
            StringBuilder mensagem = new StringBuilder("Não foi possivel se"
                    + "conectar ao banco de dados.");
            mensagem.append("\n Motivo.:").append(e.getMessage());
                throw new EdesignerBrasilException(mensagem.toString());

        } catch (ClassNotFoundException e) {
            StringBuilder mensagem = new StringBuilder("Não foi possivel se"
                    + "conectar ao banco de dados.");
            mensagem.append("\n Motivo.:").append(e.getMessage());
                throw new EdesignerBrasilException(mensagem.toString());
        }
    }//Fim do metodo para iniciar a conexão

    //Metodo para pegar a conexão
    static Connection getConexao() throws EdesignerBrasilException {
        try {
            init();
            return DriverManager.getConnection(url, usuario, senha);
        } catch (SQLException e) {
            StringBuilder mensagem = new StringBuilder();
            mensagem.append("Não foi possivel se conectar ao banco de dados.");
            mensagem.append("\n Motivo.:").append(e.getMessage());
                throw new EdesignerBrasilException(mensagem.toString());
        }
    }//Fim do metodo para pegar a conexão

    static void closeConexao(Connection con) throws EdesignerBrasilException {
        closeConexao(con, null, null);
    }

    static void closeConexao(Connection con, PreparedStatement stmt) throws
            EdesignerBrasilException {
        closeConexao(con, stmt, null);
    }

    static void closeConexao(Connection con, PreparedStatement stmt, ResultSet rs) throws
            EdesignerBrasilException {

        try {
            if (rs != null) {
                rs.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (con != null) {
                con.close();
            }
        } catch (SQLException exc) {

            StringBuilder mensagem = new StringBuilder();
            mensagem.append("Não foi possível finalizar a conexão com banco de dados.");
            mensagem.append("\nMotivo: ");
            mensagem.append(exc.getMessage());
                throw new EdesignerBrasilException(mensagem.toString());
        }
    }
}

continua...

5 Respostas

charles.eduardo

Uma classe GenericDAO para os metodos CRUD

package br.com.edesignerbrasil.persistencia.impl;

import br.com.edesignerbrasil.execao.EdesignerBrasilException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public abstract class GenericDAO {

    private static final long serialVersionUID = 1L;
    


    public Statement getStatement() throws EdesignerBrasilException {
        try {
            return GerenciadorDeConexao.getConexao().createStatement();
        } catch (SQLException e) {
            StringBuilder mensagem = new StringBuilder();
            mensagem.append("Não foi possivel se conectar ao banco de dados.");
            mensagem.append("\n Motivo.:").append(e.getMessage());
                throw  new EdesignerBrasilException(mensagem.toString());
        }
    }

    public PreparedStatement getStatement(String st) throws EdesignerBrasilException {
        try{
        return  GerenciadorDeConexao.getConexao().prepareStatement(st);
        } catch (SQLException e) {
            StringBuilder mensagem = new StringBuilder();
            mensagem.append("Não foi possivel se conectar ao banco de dados.");
            mensagem.append("\n Motivo.:").append(e.getMessage());
                throw  new EdesignerBrasilException(mensagem.toString());
        }
    }

    public ResultSet executeQuery(String query,Object... params) throws EdesignerBrasilException {
        PreparedStatement ps = getStatement(query);
        for (int i = 0; i < params.length; i++) {
            try {
                ps.setObject(i + 1, params[i]);
            } catch (SQLException e) {
                StringBuilder mensagem = new StringBuilder();
            mensagem.append("Não foi possivel se conectar ao banco de dados.");
            mensagem.append("\n Motivo.:").append(e.getMessage());
                throw  new EdesignerBrasilException(mensagem.toString());
            }
        }
        try {
            return ps.executeQuery();
        } catch (SQLException e) {
            StringBuilder mensagem = new StringBuilder();
            mensagem.append("Não foi possivel se conectar ao banco de dados.");
            mensagem.append("\n Motivo.:").append(e.getMessage());
                throw  new EdesignerBrasilException(mensagem.toString());
        }
    }

    public int executeCommand(String query,Object... params) throws EdesignerBrasilException {
        PreparedStatement ps = getStatement(query);
        for (int i = 0; i < params.length; i++) {
            try {
            ps.setObject(i+1, params[i]);
            } catch (Exception e) {
                StringBuilder mensagem = new StringBuilder();
            mensagem.append("Erro para tentativa.");
            mensagem.append(i);
            mensagem.append("com o valor");
            mensagem.append(params[i]);
            mensagem.append("\n Motivo.:").append(e.getMessage());
                throw  new EdesignerBrasilException(mensagem.toString());
            }
        }

        int result;

        try {
            result = ps.executeUpdate();
            ps.close();
                return result;
        } catch (SQLException e) {
            StringBuilder mensagem = new StringBuilder();
            mensagem.append("Não foi possivel se conectar ao banco de dados.");
            mensagem.append("\n Motivo.:").append(e.getMessage());
                throw  new EdesignerBrasilException(mensagem.toString());
        }

    }

    public Integer getNextId(String tableName) throws EdesignerBrasilException {
        ResultSet rs = executeQuery("select MAX(ID) from APP."+tableName);
        try{
        rs.next();
        Object result = rs.getObject(1);

        if (result == null) {
            rs.close();
            return 1;
            } else {
                return ((Integer)result)+1;
            }
        } catch (SQLException e){
            StringBuilder mensagem = new StringBuilder();
            mensagem.append("Não foi possivel se conectar ao banco de dados.");
            mensagem.append("\n Motivo.:").append(e.getMessage());
                throw  new EdesignerBrasilException(mensagem.toString());
        }
    }

}
Uma Fabrica de Persistencia
package br.com.edesignerbrasil.persistencia.impl;

import br.com.edesignerbrasil.persistencia.IEstado;
import br.com.edesignerbrasil.persistencia.IFabricaDePersistencia;
import br.com.edesignerbrasil.persistencia.IMunicipio;
import br.com.edesignerbrasil.persistencia.IPais;

public class FabricaDePersistencia implements IFabricaDePersistencia {

    public IPais getPaisDAO() {
        return new PaisDAO();
    }
}
charles.eduardo

A classe PaisDAO que extends a GenericDAO e implementa a Interface IPais

package br.com.edesignerbrasil.persistencia.impl;

import br.com.edesignerbrasil.dominio.Pais;
import br.com.edesignerbrasil.execao.EdesignerBrasilException;
import br.com.edesignerbrasil.persistencia.IPais;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;


public class PaisDAO extends GenericDAO implements IPais {

    public PaisDAO() {
    }

    public void setAddPais(Pais pais) throws EdesignerBrasilException {

        pais.setId(getNextId("PAIS"));
        String query = "INSERT INTO APP.PAIS (ID,NOME_PAIS) VALUES (?,?)";
        executeCommand(query, pais.getId(), pais.getNome());
        //return pais.getId();
    }

    public void setRemovePais(int idPais) throws EdesignerBrasilException {
        executeCommand("DELETE FROM APP.PAIS WHERE ID = ?", idPais);
    }

    public void setUpdatePais(Pais pais) throws EdesignerBrasilException {
        String query = "UPDATE APP.PAIS SET ID = ?,NAME=? WHERE ID = ?";
        executeCommand(query, pais.getNome(), pais.getId());
    }

    public Pais getPais(int idPais) throws EdesignerBrasilException {
        ResultSet rs = executeQuery("SELECT * FROM APP.PAIS WHERE ID = ?", idPais);
        Pais pais = null;

        try {
            while (rs.next()) {
                pais = populatePais(rs);
            }
            rs.close();
            return pais;
        } catch (SQLException ex) {
            throw new EdesignerBrasilException(ex.getMessage());
        }
    }

    public List<Pais> getAllPais() throws EdesignerBrasilException {
        ResultSet rs = executeQuery("SELECT * FROM APP.PAIS");
        List<Pais> toReturn = new LinkedList<Pais>();

        try {
            while (rs.next()) {
                toReturn.add(populatePais(rs));
            }
            rs.close();
            return toReturn;
        } catch (SQLException ex) {
            throw new EdesignerBrasilException(ex.getMessage());
        }
    }

    public List<Pais> getPaisByName(String name) throws EdesignerBrasilException {
        List<Pais> toReturn = new LinkedList<Pais>();
        ResultSet rs = executeQuery("SELECT * FROM APP.PAIS WHERE NAME LIKE ?", name + "%");

        try {
            while (rs.next()) {
                toReturn.add(populatePais(rs));
            }
            rs.close();
            return toReturn;
        } catch (SQLException ex) {
            throw new EdesignerBrasilException(ex.getMessage());
        }
    }

    public static Pais populatePais(ResultSet rs) throws EdesignerBrasilException {

        Pais toReturn = new Pais();
        try {
            toReturn.setId(rs.getInt("ID"));
            toReturn.setNome(rs.getString("NOME"));
            return toReturn;
        } catch (SQLException ex) {
            throw new EdesignerBrasilException(ex.getMessage());
        }
    }
}

a interface Fabrica de Persistencia no pacote persistencia

package br.com.edesignerbrasil.persistencia;

public interface IFabricaDePersistencia {

    public IPais getPaisDAO();
}
e a interface IPais
package br.com.edesignerbrasil.persistencia;

import br.com.edesignerbrasil.dominio.Pais;
import br.com.edesignerbrasil.execao.EdesignerBrasilException;
import java.util.List;

public interface IPais {

    void setAddPais(Pais pais) throws EdesignerBrasilException;

    List<Pais> getAllPais() throws EdesignerBrasilException;

    List<Pais> getPaisByName(String name) throws EdesignerBrasilException;

    Pais getPais(int idPais) throws EdesignerBrasilException;

    void setRemovePais(int idPais) throws EdesignerBrasilException;

    void setUpdatePais(Pais pais) throws EdesignerBrasilException;

}
no pacote dominio a classe Pais, claro:
package br.com.edesignerbrasil.dominio;

import java.io.Serializable;

public class Pais implements Serializable{

    private int id;
    private String nome;

    public Pais() {
    }

    public Pais(int id, String nome) {
        this.id = id;
        this.nome = nome;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    @Override
    public String toString() {
        return getNome();
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Pais other = (Pais) obj;
        if (this.id != other.id) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 17 * hash + this.id;
        return hash;
    }
charles.eduardo

tentei fazer um teste de conexão da seguinte forma:

public class TestBd {
    public static void main(String[] args) throws EdesignerBrasilException {

        Pais pais = new Pais(1, "seila");
        IFabricaDePersistencia fabricaDePersistencia = new FabricaDePersistencia();
        IPais pais1 = fabricaDePersistencia.getPaisDAO();
        pais1.setAddPais(pais);
    }
}
e obtenho o seguinte erro o BD está levantado isso posso garantir:
Exception in thread "main" java.lang.NullPointerException
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at br.com.edesignerbrasil.persistencia.impl.GerenciadorDeConexao.init(GerenciadorDeConexao.java:44)
        at br.com.edesignerbrasil.persistencia.impl.GerenciadorDeConexao.getConexao(GerenciadorDeConexao.java:70)
        at br.com.edesignerbrasil.persistencia.impl.GenericDAO.getStatement(GenericDAO.java:37)
        at br.com.edesignerbrasil.persistencia.impl.GenericDAO.executeQuery(GenericDAO.java:47)
        at br.com.edesignerbrasil.persistencia.impl.GenericDAO.getNextId(GenericDAO.java:100)
        at br.com.edesignerbrasil.persistencia.impl.PaisDAO.setAddPais(PaisDAO.java:26)
        at TestBd.main(TestBd.java:24)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Depois de tudo isso, se alguem conseguir me ajudar agradeço muito tentei ser o mais claro possivel, e desculpa pelo tamanho do post!

neno

Ei cara gostei do modo como vc arrumou as classe, legal :smiley:

Mas acho que seu problema é mais simples do que parece, veja

jdbc.driver = org.h2.Driver  
# jdbc.url = jdbc:h2:tcp://localhost//db/BD_ENDERECOS  
jdbc.url=jdbc:h2:tcp://localhost//db/BD_ENDERECOS  
jdbc.username = charles.eduardo  
jdbc.password = charles
driver = properties.getProperty("jbdc.driver");  
            url = properties.getProperty("jbdc.url");  
            usuario = properties.getProperty("jbdc.usuario");  
            senha = properties.getProperty("jbdc.senha");

Você trocou o “b” pelo “d” quando chama as properties :slight_smile:
Ai da null pointer quando vc tenta insstanciar o Driver. ele não acha com o Class.forName… ^^

charles.eduardo

O valeu vou verificar mais acho que é isto mesmo, muito obrigado mesmo!!!

Criado 19 de novembro de 2010
Ultima resposta 19 de nov. de 2010
Respostas 5
Participantes 2