Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Java Swing SQL Lite

  1. #1

    Java Swing SQL Lite

    Ciao Ragazzi,
    Ho creato un piccolo programma con Java Swing utilizzando un DB con SQLite. Ho un piccolo problema. Ho creato il file .sqlite all'interno dei sorgenti del programma, in modo tale da poterlo far funzionare anche come jar Runnable. Adesso non capisco una cosetta. Faccio l'export del JAR sul mio desktop inserisci un utente nel DB e funziona correttamente, ma se prendo il JAR e lo sposto su un'altra directory del mio PC, il DB perde il record inserito, come se utilizzasse una directory temporanea. Qualcuno sa dirmi il perchè?Comunque per prendermi il file sqlite utilizzo:

    Codice PHP:
     output DriverManager.getConnection("jdbc:sqlite::resource:home/utenti/utenti.sqlite"); 
    Grazie mille

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Due cose:

    1) I DB non vanno messi dentro al JAR (per ovvie ragioni): devono stare al di fuori del Jar, se vuoi che siano utilizzabili (i contenuti di un JAR sono risorse in sola lettura!)

    2) La URL di connessione al DB è di questo tipo:

    codice:
    jdbc:sqlite:<percorso_fisico_al_file>

    Ne consegue che l'applicazione cercherà il file del DB nel persorso specificato, quindi in una directory "home/utenti/" relativa alla directory corrente (working directory).

    Ne consegue ancora che se sposti il JAR ti devi (ovviamente) portare dietro anche il DB.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Ciao Lele,
    Grazie per la risposta. Ho cercato di mettere il DB dentro l’src del progetto, per avere un unico file. Comunque quello che mi hai detto tu mi torna alla perfezione, però non capisco una cosa. Faccio export del JAR nel mio Desktop e il software va a cercare il db nella directory home/utenti relativa alla directory, ma non sarebbe il package all’interno del JAR? Di conseguenza dovrei trovarmi dentro al JAR il db aggiornato giusto?Invece se apro il software con winrar e prendo il db, è sempre quello iniziale , dove finiscono i dati scrittiO_O?Crea un db temporaneo nascosto?Non capisco -_-

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Da quel che ho visto documentandomi su SQLite, la parte finale della URL di connessione è un percorso fisico su File System, non c'entra nulla con il contenuto del JAR. Quindi il driver JDBC cercherà un file in quella posizione. Molti mettono un percorso assoluto, ma è possibile anche specificare un percorso relativo ("relativo" alla directory corrente).

    Se lo avvi con doppio clic la directory corrente potrebbe essere ovunque (tipicamente, dovrebbe essere la "home" dell'utente). Di conseguenza è probabile che ti ritroverai con una directory "home/utenti" all'interno della home del tuo utente (C:\Users\TuoUtente\home\utenti\utenti.sqlite). Come potrebbe essere il desktop stesso, quindi potresti trovarti una cartella "home" nel desktop con dentro la cartella "utenti" e dentro questa il file.

    Insomma... dipende da diversi fattori, primo su tutti il sistema operativo che decide quale che sia la directory corrente.


    Ciao.
    Ultima modifica di LeleFT; 01-09-2017 a 15:45
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Grazie mille per le risposte (anche se non ho ancora trovato il mio file utenti.sqlite ), però non mi torna una cosa, se il mio jar è messo sul mio desktop: C:\Users\MioUtente\Desktop, non dovrei trovare il file sqlLite sul desktop? C:\Users\MioUtente\Desktop\utenti.sqlite ?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Alexander_37 Visualizza il messaggio
    Grazie mille per le risposte (anche se non ho ancora trovato il mio file utenti.sqlite ), però non mi torna una cosa, se il mio jar è messo sul mio desktop: C:\Users\MioUtente\Desktop, non dovrei trovare il file sqlLite sul desktop? C:\Users\MioUtente\Desktop\utenti.sqlite ?
    Se hai usato un url "jdbc:sqlite:utenti.sqlite", il file utenti.sqlite è relativo alla directory "corrente". Non necessariamente è quella che contiene il jar ... dipende da come/da dove viene lanciata la applicazione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Se uso "jdbc:sqlite:utenti.sqlite", quando metto il JAR sul desktop, il file viene creato correttamente sulla mia scrivania. Per evitare questo, avevo letto da qualche parte che ci stava la possibilità di includere il file all'interno del JAR attraverso e di usare la sintassi: "jdbc:sqlite::resource:". Allora ho preso il file che mi ha creato la prima volta e l'ho spostato all'interno dei package dei progetti utilizzando appunto:

    "jdbc:sqlite::resource:home/utenti/utenti.sqlite". (quindi il file l'ho messo all'interno di "src/home/utenti/". Quando ho fatto l'export del jar sul mio Desktop, funziona tutto il programma ma non capisco a quale file utenti.sqlite fa riferimento (anche xchè quello che sta dentro il JAR è vuoto).

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Se leggi bene la documentazione c'è scritto che l'utilizzo della URL con lo specificatore "resource" serve per poter utilizzare un DB in sola lettura (read-only).

    https://bitbucket.org/xerial/sqlite-jdbc/wiki/Usage

    Secondo la sintassi che hai usato tu, quindi

    codice:
    :resource:home/utenti/utenti.sqlite

    Il file utenti.sqlite deve trovarsi all'interno del package home.utenti

    C'è scritto, inoltre:

    DB files will be extracted to a temporary folder specified in System.getProperty("java.io.tmpdir").

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    grazie mille capito tutto . Comunque non sapevo si potesse mettere anche il DB in memoriaO_O attraverso "DriverManager.getConnection("jdbc:sqlite::memory: ")", ma in questo caso che vuol dire?Che ogni volta riavvio il PC , devo ricominciare da 0 giusto?

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Non ogni volta che riavvii il PC, ma ogni volta che riavvii l'applicazione. Quando un'applicazione termina, la memoria allocata per essa viene liberata, quindi tutto viene buttato via.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.