Olá pessoal, eu to fazendo um programa e pintou uma dúvida:
esse programa conecta-se a um banco de dados MySQL. está tudo funcionando bem, acontece que o login a senha e os outros dados para conexão estão declarados em variáveis logo na inicialização do programa… ai que vem a dúvida, eu gostaria de fazer uma class para que, quando o programa não conseguir conectar, ele abra um JFrame pedindo um novo localhost,login,senha… etc… ai o usuário vai e digita esses novos dados, o programa vai e se conecta, tá certo… mas e se o usuário fechar o programa, quando ele abrir novamente o programa teria que reconhecer aqueles dados que foram passados anteriormente sem ter que pergunta-lo novamente.
Acredito que eu não possa mudar o valor da variável no código do programa e precisaria criar um arquivo no HD para salvar essas informações e de onde o programa consultaria esses novos valores, tem alguém pra me dizer que estou errado e que isso é possível de alguma outra forma sem precisar desse arquivo feio no HD ?
lembrando que eu descartei a passagem de argumentos na abertura do programa, pois da mesma forma não taria salvando esses dados né? ou to errado?
obrigado e um forte abraço a todos.
Tiago, é um sistema desktop ou web ?
Acho q o TXT atende mas n consigui entender muito sobre o seu ambiente. arquitetura do sistema… etc
Esses dados do seu programa ficam em um arquivo ou no código mesmo?
Então, desculpa, eu realmente não cheguei a citar, o programa é para desktop, é um catálogo de cds que usa o mysql como banco de dados…
as informações de conexão ficam no código do programa, mas se eu quiser modificar essas informações em algum momento sem mexer no código do programa, é possível? ou teria que criar um arquivo para o programa procurar sempre que for aberto se foi atribuído novas informações de conexão toda vez que eu adicionar um novo localhost/senha/login etc?
[quote=tiagomac]mas se eu quiser modificar essas informações em algum momento sem mexer no código do programa, é possível? ou teria que criar um arquivo para o programa procurar sempre que for aberto se foi atribuído novas informações de conexão toda vez que eu adicionar um novo localhost/senha/login etc?
[/quote]
Claro que é possível. E possível da forma que você falou. (um arquivo e tal…) Acho que é a melhor forma e bastante simples também.
Se seu ambiente permite, você pode guardar essas informações (usuário/senha do banco) em um servidor LDAP.
Ou, se vc quiser deixar tudo simplezinho, use um Properties.
Como foi citado por orlandocn, Properties é uma ótima opção. Eu mesmo costumo usar Properties para armazenar configurações de banco de dados. Minha implementação é essa:
package ym.util.db;
import java.io.File;
import java.io.ObjectInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
public final class DatabaseConfig
{
private Properties configs;
public DatabaseConfig(File config) throws IllegalArgumentException, IOException
{ read(config); }
public String get(String item)
{ return ((configs.getProperty(item) != null) ? configs.getProperty(item) : new String()); }
public String driver()
{ return get("databaseDriver"); }
public String url()
{ return get("databaseUrl"); }
public String username()
{ return get("databaseUsername"); }
public String password()
{ return get("databasePassword"); }
private void read(File config) throws IllegalArgumentException, IOException
{
try
{
ObjectInputStream file = new ObjectInputStream(new FileInputStream(config));
configs = (Properties) file.readObject();
}
catch(ClassNotFoundException e)
{ throw new IllegalArgumentException("File hasn't database config - " + e.getMessage()); }
catch(Exception e)
{ throw new IOException("Exception when reading config file - " + e.getMessage()); }
}
}
Com essa implementação, fica simples carregar as configurações. A utilização é a seguinte: você passa como argumento para o construtor um objeto File. Este objeto fará referência a um arquivo que contém serializado nele um objeto Properties.
Esse objeto Properties conterá as seguintes chaves (o valor você definirá):
- databaseDriver
- databaseUrl
- databaseUsername
- databasePassword
Tendo as propriedades acima, você depois usará algo parecido com isso em seu código:
DatabaseConfig dc = new DatabaseConfig(new File(“dbconfig.dat”));
Class.forName(dc.driver());
Connection conn = DriverManager.getConnection(dc.url(), dc.username(), dc.password());
ou ainda, caso vôcê tenha passado outras properiedades para o objeto Properties, poderá usar:
dc.get(“NomeDaPropridade”);
Espero que lhe ajude.
Yky, pra que usar objeto Properties serializado? Voce pode usar os metodos do proprio Properties pra ler e salvar os arquivos!
Bah, é verdade.
É que quando optei por utilizar Properties, não atentei por uma leitura completa dos métodos na API. Guiei-me pelo parágrafo do livro dos Deitel que cita explicitamente o fato de as Properties serem Serializáveis por padrão, o que compreendi como sendo uma dica do tipo “é viável salvar configurações em objetos Properties seralizados”.
Entretanto, vou agora ler as properiedades de Properties (que redundância) e refazer minha classe.
Thank you for attention!