Tem como salvar valores sem usar arquivos no disco?

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 :cry: ?
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.

http://www.guj.com.br/java.tutorial.artigo.35.1.guj

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!