View Full Version : [Java] Applicazione standalone con db nel jar
stevenen
16-11-2007, 12:08
Ciao a tutti...ho frugato un pò prima di postare cercando qualcosa ma non ho trovato specificatamente...
Sto creando un programmino in Java che necessita di una base di dati..mi servirebbe appunto un db che risieda nel jar in modo da poter eseguire il programma in qualunque macchina..
ho letto qualcosa su hsqldb...ma non trovo molta doc in giro...qualcuno ha qualche dbms da suggerirmi?
isAlreadyInUse
16-11-2007, 12:14
Apache Derby
texerasmo
16-11-2007, 12:23
questo link potrebbe esserti utile
http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javadb/
texerasmo
16-11-2007, 14:35
puoi provare anche ad utilizzare questo
jackrabbit
http://jackrabbit.apache.org/
però non so se fa al caso tuo
isAlreadyInUse
16-11-2007, 14:37
E che centra quello?
texerasmo
16-11-2007, 14:56
jackrabbit ti aiuta a gestire un repository anche seza db.
Infatti ho sottolineato, non se se può fare al caso suo, dipende da cosa deve fare.
Se deve fare un standalone può utilizzare jetty e far partire apllicativo come servlet a se e occupare un porta nel pc.
e tutti vissero felici e contenti
isAlreadyInUse
16-11-2007, 14:59
Amen
blackknight
16-11-2007, 17:00
Se ti serve solo un db puoi usare derby o hsqldb...nel caso susassi java 6 non hai problemi perchè hai a disposizione javadb che altri non è che derby ;)
stevenen
17-11-2007, 12:25
ok grazie a tutti per i suggerimenti...ora provo un pò derby
stevenen
17-11-2007, 13:24
allora ho qualche dubbio...se non ho capito male...per usare questo leggerissimo db basta in includere il jar nel progetto e aggiungere il path del jar nel classpath della macchina....mi sorge quindi un dubbio...io se voglio usare la mia applicazione in diverse macchine devo andare manualmente in ogni macchina e settare il classpath con il path del derby.jar?oppure posso settare questa variabile via codice?oppure sto capendo male e devo settare il classpath solo nel mio pc dove sto sviluppando?
Sarebbe un "problema" altrimenti, in quanto se io do l'applicazione ad uno che non ne capisce molto poco di queste storie, mi toccherebbe andare li e settargli a mano il classpath...e se devono usarlo 5,6,7 macchine sparse per la città?
Poi un'altra cosa...nell'esempio del link che mi avete fornito della sun...crea via codice il db e le tabella...mah ogni volta che l'applicazione gira viene ricreato il db da zero???
Sono un pò confuso...illuminatemi grazie
isAlreadyInUse
17-11-2007, 13:34
Una volta incluso nel progetto non devi fare nient'altro...
Prova un po questo
EmbeddedSimpleDataSource ds = new EmbeddedSimpleDataSource();
ds.setDatabaseName("TEST");
//ds.setCreateDatabase("create");
try {
Connection con = ds.getConnection();
Statement st = con.createStatement();
/*
st.execute("create table items(num int, codice varchar(40))");
st.execute("insert into items values (1,'COD01')");
st.execute("insert into items values (2,'COD02')");
st.execute("insert into items values (3,'COD03')");
st.execute("insert into items values (4,'COD04')");
st.execute("insert into items values (5,'COD05')");
*/
ResultSet rs = st.executeQuery("select num, codice from items");
while (rs.next()) {
System.out.println(rs.getString(2));
}
} catch (SQLException e) {
e.printStackTrace();
}
init();
stevenen
17-11-2007, 13:54
Una volta incluso nel progetto non devi fare nient'altro...
Prova un po questo
EmbeddedSimpleDataSource ds = new EmbeddedSimpleDataSource();
ds.setDatabaseName("TEST");
//ds.setCreateDatabase("create");
try {
Connection con = ds.getConnection();
Statement st = con.createStatement();
/*
st.execute("create table items(num int, codice varchar(40))");
st.execute("insert into items values (1,'COD01')");
st.execute("insert into items values (2,'COD02')");
st.execute("insert into items values (3,'COD03')");
st.execute("insert into items values (4,'COD04')");
st.execute("insert into items values (5,'COD05')");
*/
ResultSet rs = st.executeQuery("select num, codice from items");
while (rs.next()) {
System.out.println(rs.getString(2));
}
} catch (SQLException e) {
e.printStackTrace();
}
init();
ho messo derby.jar dentro la cartella del progetto...ho fatto una classe a parte e messo il codice...
cannot find symbol - class EmbeddedSimpleDataSource...
:muro:
isAlreadyInUse
17-11-2007, 13:59
Che stai usando per sviluppare?
stevenen
17-11-2007, 14:00
Che stai usando per sviluppare?
sto usando bluej
isAlreadyInUse
17-11-2007, 14:17
Non lo conosco, comunque basta includere il derby.jar nelle librerie da far usare al progetto e l'esempio che ti ho dato funziona.
stevenen
17-11-2007, 14:28
Non lo conosco, comunque basta includere il derby.jar nelle librerie da far usare al progetto e l'esempio che ti ho dato funziona.
boh guarda sarà che è un tool molto didattico mah oltre che copiarlo dentro la cartella del progetto non posso fare altro..
isAlreadyInUse
17-11-2007, 14:43
Passa ad eclipse oppure metti il jar nella cartella lib/ext della tua jre/jdk
stevenen
17-11-2007, 14:44
Passa ad eclipse oppure metti il jar nella cartella lib/ext della tua jre/jdk
già messo nella jdk/jre/lib/ext...cmq si mi sa che eclipse è mucho più professional:D
isAlreadyInUse
17-11-2007, 14:46
Bhe è piu completo, quello che usi tu non l'ho nemmno setito nominare prima di adesso.
^TiGeRShArK^
17-11-2007, 15:06
basta che lo setti nel casspath..
immagino che ci sia qualche opzione in bluej in cui puoi specificare i parametri da passare alla VM per l'esecuzione.
In quel caso basta aggiungere -cp <file_jar_di_derby>.
Per distribuirlo ti consiglio di aggiungere la entry del jar di derby, con i percorsi relativi, all'interno del MANIFEST del .jar così viene caricato automaticamente prima di eseguirlo.
stevenen
17-11-2007, 15:25
Per distribuirlo ti consiglio di aggiungere la entry del jar di derby, con i percorsi relativi, all'interno del MANIFEST del .jar così viene caricato automaticamente prima di eseguirlo.
ovvero??io->:oink:
isAlreadyInUse
17-11-2007, 15:31
Scusa se mi permetto, ma tu stai sviluppando un applicativo che a quanto pare ti hanno commissionato senza sapere dove mettere mano?
stevenen
18-11-2007, 20:08
Scusa se mi permetto, ma tu stai sviluppando un applicativo che a quanto pare ti hanno commissionato senza sapere dove mettere mano?
no no non esageriamo...è un applicativo che io voglio fare per una persona che ne ha bisogno che però poi potrebbe essere usato anche da altre persone...in java ho fatto dei piccoli programmi che non necessitavano di db, per questo mi trovo un pò spiazzato...
isAlreadyInUse
18-11-2007, 20:10
Capito...di che si tratta? :D
stevenen
19-11-2007, 10:53
Capito...di che si tratta? :D
è un interfaccia composta da qualche maschera per fatturazione inserimento beni, fornitori ecc..ora lo dovrebbe usare solo una persona, però sicuramente se la cosa risulta apprezzata potrebbe essere usata in tutto l'ufficio...
Leggevo una cosa...con java 6 il java db derby è già incluso nella jdk giusto??
isAlreadyInUse
19-11-2007, 10:55
Si si è praticamente Derby
stevenen
19-11-2007, 14:17
basta che lo setti nel casspath..
immagino che ci sia qualche opzione in bluej in cui puoi specificare i parametri da passare alla VM per l'esecuzione.
In quel caso basta aggiungere -cp <file_jar_di_derby>.
Per distribuirlo ti consiglio di aggiungere la entry del jar di derby, con i percorsi relativi, all'interno del MANIFEST del .jar così viene caricato automaticamente prima di eseguirlo.
scusa se ti stresso...ma come lo aggiungo il path al manifest?...
in pratica sono riuscito a collegarmi...però quando creo il jar...nel pacchetto che mi crea, all'interno non c'è il file derby.jar...come fare??
stevenen
19-11-2007, 14:23
scusa se ti stresso...ma come lo aggiungo il path al manifest?...
in pratica sono riuscito a collegarmi...però quando creo il jar...nel pacchetto che mi crea, all'interno non c'è il file derby.jar...come fare??
allora no quello ci sono riuscito...nel manifest ho il class-path corretto
^TiGeRShArK^
19-11-2007, 14:36
scusa se ti stresso...ma come lo aggiungo il path al manifest?...
in pratica sono riuscito a collegarmi...però quando creo il jar...nel pacchetto che mi crea, all'interno non c'è il file derby.jar...come fare??
Non devi inserire il derby.jar nel tuo jar.
Devi distribuire i jar aggiungendo all'attributo classpath del Manifest del tuo jar l'indirizzo relativo del file derby.jar.
Ad esempio se distribuisci il tuo software con il tuo jar nella dir base e il file derby.jar sotto lib devi inserire nel manifest l'entry:
Class-Path: ./lib/derby.jar
se non ricordo male :p
stevenen
19-11-2007, 15:24
Non devi inserire il derby.jar nel tuo jar.
Devi distribuire i jar aggiungendo all'attributo classpath del Manifest del tuo jar l'indirizzo relativo del file derby.jar.
Ad esempio se distribuisci il tuo software con il tuo jar nella dir base e il file derby.jar sotto lib devi inserire nel manifest l'entry:
Class-Path: ./lib/derby.jar
se non ricordo male :p
si si ci sono riuscito però continua a non funzionare niente...nel senso...atraverso bluej poso ovviamente avviare l'applicazione...e tutto funge...poi effettuo l'esportazione del jar...e puff:muro: :muro: niente...ho jar e libreria nella stessa cartella..stesso percordo, e nel manifest
Class-Path: derby.jar
Ciao a tutti, mi accodo alla richiesta perché il mio problema riguarda lo stesso argomento: sto anch'io cercando di creare un'applicazione con il db embedded. Ho dato un'occhiata alla documentazione inclusa con derby. Le mie perplessità al momento sono:
- Per lo sviluppo mi conviene tenere il db fuori dalla cartella del progetto e poi includerlo al momento del packaging per la distribuzione o mi conviene crearlo all'interno del progetto? Mi servirebbe proprio la "best practice" da parte di chi ha già lavorato in questo modo..io ho sempre usato i database in modalità client/server
- Dato che lavoro sotto SVN, per quanto riguarda il db cosa mi conviene mettere sotto controllo versione? Tutta la cartella mi sembra una cosa eccessiva..può essere una buona idea crearsi un file sql da mettere sotto svn contenente il DDL del db?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.