PDA

View Full Version : [Java] Come salvare i dati?


Dimension7
20-11-2009, 12:47
Ho intenzione di sviluppare un piccolo programmino che mi permetta di tenere la contabilità personale, cioè segnare entrate, uscite, valore dei depositi e dei debiti e poco altro. Lo faccio per uso personale, ma non è detto che se venisse fuori un bel programma non lo potrei rendere freeware o open, ma ora come ora il discorso è prematuro e credo ininfluente al fine della domanda.
Quello che volevo sapere però è come salvo i dati? Alla fine credo si tratterebbe di semplici tabelle con scritto la data, l'ammontare del movimento, una piccola descrizione e poco altro, o ancora più semplicemente per i depositi una hashmap con scritto il nome e il valore monetario in esso contenuto. Dovrei cercare un sistema che mi salvi il tutto in maniera da poter fare poi un backup dei dati in caso di format o da trasportare su pc diversi. Avevo pensato a un database SQL, ma non conosco il linguaggio e non saprei da dove partire, nel caso fosse molto conveniente quest'ultima opzione sarei anche disposto ad imparare un po' di sql...

Don[ITA]
20-11-2009, 13:44
Potresti crearti un tuo "Contenitore" che implementi Serializable (http://java.sun.com/javase/6/docs/api/java/io/Serializable.html), e poi salvarlo direttamente su file sotto forma di oggetto. Oppure se preferisci usare una HashMap (http://java.sun.com/javase/6/docs/api/java/util/HashMap.html), gia implementa quell'interfaccia ;)

morskott
20-11-2009, 13:55
Bhe, o come hai detto tu su un DB (che penso sia la soluzione migliore) o su files.
Su files ti puoi inventare un tuo formato di salvataggio (del tipo prima riga prima posizione la data poi uno spazio l'ammontare e così via) o ti crei una classe che rappresenta la cosa da salvare e la fai implementare serializable, così la scrivi/leggi sul/dal disco con un ObjectOutputStream/ObjectInputStream sulla falsa riga di public class Movimentazione implements java.io.Serializable{
private java.util.GregorianCalendar dataMovimentazione;
private double ammontareMovimentazione;
private String commentoMovimentazione;

//Getter e (eventuali) setter
}

public class Contabilita{
private java.util.Set<Movimentazione> movimentazioni;

public boolean aggiungiMovimentazione(Movimentazione m){
return this.movimentazioni.add(m);
}

public void salvaSuFile(String filePath) throws java.io.IOException{
java.io.FileOutputStream fos=new java.io.FileOutputStream(filePath);
java.io.ObjectOutputStream oos=new java.io.ObjectOutputStream(fos);
for (Movimentazione m:this.movimentazioni){
oos.writeObject(m);
}
oos.close();
fos.close();
}

public void leggiDaFile(String filePath) throws java.io.IOException{
java.io.FileInputStream fis=new java.io.FileInputStream(filePath);
java.io.ObjectInputStream ois=new java.io.ObjectInputStream(fis);
Object in=ois.readObject();
while(in!=null){
this.movimentazioni.add((Movimentazione)in);
in=ois.readObject();
}
ois.close();
fis.close();
}

}

Dimension7
20-11-2009, 14:56
Ma usare un database sql non mi costringe poi ad installare anche il server sql? A quel punto diventa troppo complicato, mentre salvando gli oggetti posso gestire tutto tramite il programma in java e basta, no?

wizard1993
20-11-2009, 15:20
Ma usare un database sql non mi costringe poi ad installare anche il server sql? A quel punto diventa troppo complicato, mentre salvando gli oggetti posso gestire tutto tramite il programma in java e basta, no?

in realtà esistono molti database sql embendeb, comunque secondo me la cosa migliore è la serializzazione tramite le classi XMLEncoder/XMLdecoder, che permettono di non perdere i dati se cambi la struttura dell'oggetto