A maioria das aplicações trabalha com persistência de dados, ou seja, é necessário Gravar, Recuperar, Alterar e Deletar dados em algum Banco de Dados. Para essas 4 operações básicas é usada a sigla CRUD (Create, Read, Update, Delete) e é necessário uma conexão com o banco de dados para realizá-las. Para isso, é sempre criada uma classe com método(s) de Fábrica de Conexão (Connection Factory) e o código para isso fica parecido com o código mostrado na imagem abaixo:
Os dados necessários para uma conexão com o banco são:
- Usuário;
- Senha;
- URL de conexão;
- Banco de Dados;
Porém, no exemplo da imagem acima, essas configurações ficam amarradas ao código, sendo necessário reescrever a classe e recompilar o programa a cada vez que qualquer um desses dados é alterado. Então a melhor sugestão seria criar um arquivo de configuração externo ao programa que mantem esses dados. Para isso utilizaremos dos recursos das classes: java.util.Properties, java.io.FileInputStream e java.io.FileOutputStream.
Primeiro, criaremos uma classe que cuidará dessa parte, podemos nomeá-la JdbcConnection:
public class JdbcConnection {
private String user;
private String passwd;
private String url;
private String database;
//Criar getters e setters
}
Como o arquivo de configuração ainda não existe, teremos que criar, dentro da classe JdbcConnection um método para criação do arquivo Xml utilizando um objeto Properties:
public void setProps(){
Properties props = new Properties();
props.setProperty("jdbc.user", "postgres");
props.setProperty("jdbc.passwd", "senha");
props.setProperty("jdbc.url", "jdbc:postgresql://localhost:5433");
props.setProperty("jdbc.dataBase","banco");
try {
FileOutputStream fos = new FileOutputStream("config.xml");
props.storeToXML(fos, "FILE JDBC PROPERTIES:","ISO-8859-1");
fos.close();
}catch (IOException e){
System.out.println(e.getMessage());
}
}
Assim, será criado um arquivo parecido com esse:
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>FILE JDBC PROPERTIES:</comment> <entry key="jdbc.passwd">error#404</entry> <entry key="jdbc.url">jdbc:postgresql://localhost:5433</entry> <entry key="jdbc.user">postgres</entry> <entry key="jdbc.dataBase">ponto</entry> </properties>
Através das informações contidas nesse arquivo, iremos preencher os atributos de um objeto JdbcConnection, e para isso criamos o método abaixo:
public void getProps (){
Properties props = new Properties();
try {
//Setamos o arquivo que será lido
FileInputStream fis = new FileInputStream("config.xml");
//método load faz a leitura através do objeto fis
props.loadFromXML(fis);
} catch (IOException e) {
System.out.println(e.getMessage());
}
//Captura o valor da propriedade, através do nome da propriedade(Key)
this.setUser(props.getProperty("jdbc.user"));
this.setPasswd(props.getProperty("jdbc.passwd"));
this.setUrl(props.getProperty("jdbc.url"));
this.setDatabase(props.getProperty("jdbc.dataBase"));
}
E para finalizar, o nosso método de Conexão ficaria mais ou menos dessa forma:
public static Connection getConnection(){
Connection con = null;
try {
JdbcConnection jdbc = new JdbcConnection();
jdbc.getProps();
if (jdbc.getUrl() == null) {
jdbc.setProps();
jdbc.getProps();
}
con = (Connection) DriverManager.getConnection(jdbc.getUrl() + "/" + jdbc.getDatabase(), jdbc.getUser(), jdbc.getPasswd());
} catch (Exception e) {
System.out.println(e.getMessage());
}
return con;
}
Note que é preciso testar se o arquivo existe, para que os atributos do objeto jdbc não venham vazios. A maneira mais prática e didática que veio na minha mente foi testar se algum dos atributos ainda está nulo mesmo depois da chamada jdbc.getProps(); e, caso esteja nulo, chamo jdbc.setProps(); com as configurações “amarradas” no código-fonte do seu sistema. Porém, depois do arquivo gerado é possível alterar sem problemas.



