View Full Version : [JAVA] Consigli su DataBase file-based.
LacioDromBuonViaggio
07-04-2009, 16:31
Come da titolo vorrei creare un programmino che operi su un database in locale e che sia portabile all'ennesima potenza.
In pratica vorrei un file JAR con il programma e un file per il database.
L'utente deve poter scegliere dal programma di creare un nuovo DB oppure aprirne uno salvato precedentemente. Di conseguenza si deve avere l'opportunità di copiare solamente il file del database e di utilizzarlo in qualsiasi altro PC con lo stesso programma (ovviamente che abbia una JVM).
Cercando qua e la ho capito che mi serve un database file-based (non client/server stile JDBC).
Ho trovato HSQLDB, ma vorrei sapere se ne esiste qualcun altro che non necessiti di installazioni o configurazioni.
Avete avuto esperienze a riguardo? :help:
io mi trovo bene con oracle berkeley db.
Crea più di un file in una stessa cartella per cui si tratterebbe di copiare questa cartella.
Se ti serve un file unico e la quantità di dati non è eccessiva (diciamo qualche centinaio di migliaia di record) puoi usare un logger.
LacioDromBuonViaggio
07-04-2009, 17:04
io mi trovo bene con oracle berkeley db.
Crea più di un file in una stessa cartella per cui si tratterebbe di copiare questa cartella.
Meglio se solo un file, in ogni caso essendo Oracle non credo sia free, o no?
Richiede installazioni o configurazioni varie?
Avrei bisogno che possa essere utilizzato in qualsiasi macchina che abbia installato il pacchetto 'standard' di JAVA.
Se ti serve un file unico e la quantità di dati non è eccessiva (diciamo qualche centinaio di migliaia di record) puoi usare un logger.
Mah, direi molti di meno. Solo che non conosco i logger e visto che ormai sono ferrato in Query SQL preferirei utilizzare quelle. Sono comunque sempre aperto a nuovi orizzonti.
Mi faccio un giro su google per istruirmi su questi logger :D, se hai qualche link mi risparmieresti tempo e fatica!
berkeley db è free e si tratta di un file jar di 1 megabyte circa che andrebbe a far parte delle librerie del tuo programma.
Non un database SQL.
LacioDromBuonViaggio
07-04-2009, 17:24
berkeley db è free e si tratta di un file jar di 1 megabyte circa che andrebbe a far parte delle librerie del tuo programma.
Non un database SQL.
In che senso?
Comunque cercherò notizie perchè potrebbe interessarmi. Magari per avere un solo file JAR potrei inserire questa libreria all'interno del programma, sarà possibile?
Per quanto riguarda i logger non trovo sufficiente documentazione, sembra di capire che creino dei file .log che non hanno niente a che fare con database relazionali, giusto?
Se così fosse come poteri gestirli per eventuali richieste?
un logger tradizionalmente è qualcosa che accoda dei messaggi.
si può usare come database accoppiandolo ad una struttura dati in memoria.
In pratica quando crei un recordo lo salvi nella struttura dati in memoria (tipo lista.add(record)) e emetti un messaggio "crea record" nel logger, che lo salva sul file di log. Quando modifichi un record modifichi il record nella struttura dati ed emetti un messaggio "modifica record" nel logger. Lo stesso vale per l'eliminazione.
Pare strano ma questo completa il database.
Quando l'applicazione si avvia per ricostruire il database altro non fai che leggere i messaggi che il logger ha scritto nel file di log, applicandoli ad una struttura dati inizialmente vuota.
Il limite al numero di record deriva dalla necessità di mantenere in memoria tutti i dati. La conservazione dei dati è garantita anche in caso di disastro (genere inciampo nel cavo e si spegne il pc) e le prestazioni in lettura sono eccellenti.
E' anche una cosa molto rapida da scrivere. Si tratta di un paio di centinaia di righe di codice al massimo.
Per Berkeley db scrissi una guida tempo fa.
http://www.hwupgrade.it/forum/showthread.php?t=1563333
Io mi trovo bene con H2. E' il successore di HSQLDB, è un db relazionale, ha gestione delle transazioni, un ottimizzatore a costi, ricerca fulltext, può girare in modalità embedded o client/server, e il footprint del jar da includere è solo di 1 mb (poi ha altre cose fighe tipo la possibilità di criptare il db, e altro...)
Ah, e poi ha un bel pò di documentazione. Dacci un occhio.
http://www.h2database.com
wizard1993
07-04-2009, 19:27
io di solito quando ho necessità simili mi appoggio ai porting di sqlite per java come
http://www.zentus.com/sqlitejdbc/
LacioDromBuonViaggio
07-05-2009, 10:53
Io mi trovo bene con H2. E' il successore di HSQLDB, è un db relazionale, ha gestione delle transazioni, un ottimizzatore a costi, ricerca fulltext, può girare in modalità embedded o client/server, e il footprint del jar da includere è solo di 1 mb (poi ha altre cose fighe tipo la possibilità di criptare il db, e altro...)
Ah, e poi ha un bel pò di documentazione. Dacci un occhio.
http://www.h2database.com
Ho seguito il tuo consiglio e mi sto istruendo.. Solo che non riesco a trovare degli esempi 'consistenti'... Sul sito c'è giusto qualche cosetta, in più ho trovato dei samples nella cartella di installazione.
Conosci qualche guida/tutorial con degli esempi pratici tipo:
1)connessione
2)scrittura
3)disconnessione
4)riconnessione
5)lettura
6)modifica
7)salvataggio
8)disconnessione
Poi non ho capito bene come gestisce le password di connessione.
Con questa istruzione
Connection conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", "");
sto creanto un nuovo DB chiamato test nella mia home e gli sto impostando user 'sa' e password vuota?
Se io volessi salvare la password su DB (per ora senza hash) e controllarla ad ogni connessione quell'user e password che inserisco nella connessione sono le stesse?
Inoltre, provando dei samples, ho notato che mi crea 5 o 6 file nella cartella del database. A me servirebbe solo un file...
cdimauro
07-05-2009, 11:10
FireBird (http://www.firebirdsql.org/index.php?op=files&id=engine_212) è disponibile anche in versione embedded (niente da installare: si copiano i file dentro la cartella dell'applicazione) e genera un solo file per l'intero database.
Ho seguito il tuo consiglio e mi sto istruendo.. Solo che non riesco a trovare degli esempi 'consistenti'... Sul sito c'è giusto qualche cosetta, in più ho trovato dei samples nella cartella di installazione.
Conosci qualche guida/tutorial con degli esempi pratici tipo:
1)connessione
2)scrittura
3)disconnessione
4)riconnessione
5)lettura
6)modifica
7)salvataggio
8)disconnessione
Per questo basta un qualsiasi tutorial su JDBC (o, nel caso volessi qualcosa di più alto livello, JPA o il tuo ORM di fiducia).
Ad esempio: http://java.sun.com/docs/books/tutorial/jdbc/index.html
Poi non ho capito bene come gestisce le password di connessione.
Con questa istruzione
Connection conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", "");
sto creanto un nuovo DB chiamato test nella mia home e gli sto impostando user 'sa' e password vuota?
Se io volessi salvare la password su DB (per ora senza hash) e controllarla ad ogni connessione quell'user e password che inserisco nella connessione sono le stesse?
Si la password è vuota.
Se non mi ricordo male, quando ti connetti ad un db che non esiste questo viene creato e lo user diventa l'amministratore di quel db (con la password che hai scelto).
Inoltre, provando dei samples, ho notato che mi crea 5 o 6 file nella cartella del database. A me servirebbe solo un file...
Sinceramente, non mi ricordo quanti file si crea per tenere traccia di tutto. Se per te questo è un problema, puoi usare uno degli altri prodotti che ti hanno consigliato.
LacioDromBuonViaggio
07-05-2009, 11:21
FireBird (http://www.firebirdsql.org/index.php?op=files&id=engine_212) è disponibile anche in versione embedded (niente da installare: si copiano i file dentro la cartella dell'applicazione) e genera un solo file per l'intero database.
Grazie, controllerò...
EDIT: ma con JAVA come lo faccio funzionare??
Sinceramente, non mi ricordo quanti file si crea per tenere traccia di tutto. Se per te questo è un problema, puoi usare uno degli altri prodotti che ti hanno consigliato.
Mi riferivo a questi (http://www.h2database.com/html/features.html#database_file_layout) file.
cdimauro
07-05-2009, 11:34
Grazie, controllerò...
EDIT: ma con JAVA come lo faccio funzionare??
Ci sono dei driver appositi (JDBC?).
LacioDromBuonViaggio
12-05-2009, 09:11
Controllando qua e là sono giunto alla conclusione che H2, per ora, è il meglio che possa utilizzare. Per il problema dei diversi file con estensione .db potrei provare a creare uno pseudo-archivio da scompattare all'apertura del programma e da compattare al salvataggio (ma questo è un altro problema).
Quindi rinnovo la richiesta d'aiuto in quanto non capisco bene come gestire la connessione. Vorrei che user e pass di accesso al DB risiedano sullo stesso, ma non so se è possibile farlo (credo ci voglia una password per il DB e una per l'utente), sbaglio?
LacioDromBuonViaggio
18-05-2009, 10:25
Ma un .mdb no?
Ovvero?
Ovvero?
Database Access, un file solo, lo prendi e lo porti dove vuoi, non serve avere Access installato per farlo funzionare...
Accessibilissimo, ti puoi connettere come vuoi, ci fai quello che vuoi (a patto che non lo usi con un sacco di utenze in contemporanea)
LacioDromBuonViaggio
18-05-2009, 11:06
Database Access, un file solo, lo prendi e lo porti dove vuoi, non serve avere Access installato per farlo funzionare...
Accessibilissimo, ti puoi connettere come vuoi, ci fai quello che vuoi (a patto che non lo usi con un sacco di utenze in contemporanea)
Si, ho controllato un pò qua e là.. Mi andrebbe bene perchè tanto è il programma che voglio realizzare è mono-utente.
Ma mi rimane il dubbio: con JAVA si può usare?
Si, ho controllato un pò qua e là.. Mi andrebbe bene perchè tanto è il programma che voglio realizzare è mono-utente.
Ma mi rimane il dubbio: con JAVA si può usare?
Beh io l'ho usato con C#, VB, C e C++.....
ADO, DAO, OleDB....
Penso proprio di sì...
Qualche novità? Hai trovato "la tua strada"? :)
^TiGeRShArK^
27-05-2009, 09:19
Se la base di dati non è complessa mi sa che il classico file di testo va + che bene.....
Certo con java è un pò + macchinoso ma con C# e Linq è una goduria, nemmeno ti accorgi che stai usando un file di testo caricato in memoria dato che puoi operare tutte le query che vuoi tramite linq :p
LacioDromBuonViaggio
27-05-2009, 11:51
Qualche novità? Hai trovato "la tua strada"? :)
Ho provato con il *.mdb, ma siccome sto usando le JPA non riesco a farlo funzionare come dovrebbe.
Per prima cosa non mi crea da solo un *.mdb ma devo crearlo vuoto con Access, seconda cosa non riesco a creare le tabelle perchè le Query in Access sono un pò diverse e quindi le JPA non riescono a crearlo.
Quindi per ora H2+JPA (dovrò trovare un modo di comprimere tutti i file che crea H2 per il database in un archivio di un solo file).
Se la base di dati non è complessa mi sa che il classico file di testo va + che bene.....
Certo con java è un pò + macchinoso ma con C# e Linq è una goduria, nemmeno ti accorgi che stai usando un file di testo caricato in memoria dato che puoi operare tutte le query che vuoi tramite linq :p
Ho appena fatto un programmino di prova 'giocattolissimo' che legge e scrive da un file di testo perchè sto incontrando parecchi problemi nel fare un piccolo software che mi ero proposto di fare (link al thread (http://www.hwupgrade.it/forum/showthread.php?t=1973146)).
Se non mi avesse aiutato il buon PGI-Bis avrei già mollato tutto da tempo.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.