Visualizzazione dei risultati da 1 a 6 su 6

Discussione: SQLITE dentro jar

Hybrid View

  1. #1
    andbin Grazie mille!!!!
    al momento però non riesco a trovare il modo per acquisisre il Path dove si trova il database.
    In sostanza usando la seguente:
    String pathDB=System.getProperty("user.dir") + "\\bin\\DataBase.sqlite"
    quando avvio il tool direttamente da Eclipse tutto funziona perfettamente.
    Mentre quando copio il tool su una pendrive e lo avvio da un altro pc, non funziona più, perche non riesce a trovare il percorso del Database.
    Come devo fare per unsare il principio delle risorse getResource/getResourceAsStream di java.lang.Class?


    Grazie,
    Giuseppe

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da peppesbe Visualizza il messaggio
    al momento però non riesco a trovare il modo per acquisisre il Path dove si trova il database.
    In sostanza usando la seguente:
    String pathDB=System.getProperty("user.dir") + "\\bin\\DataBase.sqlite"
    La property "user.dir" rappresenta la directory "corrente" ed è molto vaga, nel senso che dipende da diversi fattori. Quindi non va granché bene. Io dicevo la directory "home" dell'utente (su Windows qualcosa tipo C:\Users\Andrea, sui Linux qualcosa tipo /home/andrea ). E questa si rintraccia con la system property "user.home".
    Tipicamente sotto la home dell'utente si mette una directory specifica per l'applicazione. Che sempre tipicamente per convenzione (e per "copiare" un po' il comportamento dei Linux, inizia con il punto "." )

    Quindi in codice, qualcosa del tipo (non l'ho provato ora):

    codice:
    File appDir = new File(System.getProperty("user.home"), ".myapp");
    appDir.mkdir();     // assicura che la .myapp sia creata se non esiste (mi aspetto che la home esista!)
    
    File sqliteFile = new File(appDir, "DataBase.sqlite");
    
    if (!sqliteFile.exists()) {
        // il file del db NON esiste ... crealo!
    }

    Quote Originariamente inviata da peppesbe Visualizza il messaggio
    Come devo fare per unsare il principio delle risorse [COLOR=#333333]getResource/getResourceAsStream di java.lang.Class?
    Metti il file "iniziale" del DB in un certo package, es. com.esempio.myapp.resources

    Se in questo package ci metti una classe di utilità es. AppResources:

    codice:
    package com.esempio.myapp.resources;
    
    public class AppResources {
    
       .....
       // qui puoi fare
           InputStream is = AppResources.getClass().getResourceAsStream("DefaultDataBase.sqlite");
    }

    DefaultDataBase.sqlite in questo modo è relativo al package della classe e se il file è in quello stesso package, la JVM lo trova di certo.
    Ottieni un InputStream, devi copiare tu tutto il contenuto in quel file referenziato da sqliteFile di prima. Si tratta di I/O banale/basilare che DEVI conoscere. Altrimenti ci sono librerie apposite che hanno metodi di utility per copiare da InputStream a File e anche altro.


    P.S. ho visto l'altra tua discussione. Te lo dico subito: NON ti serve sapere il nome e/o il percorso del jar. Anche se teoricamente/tecnicamente è fattibile, è brutto farlo oltre che "critico".
    Ultima modifica di andbin; 04-10-2016 a 18:39
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Scusa, scritto prima male io per fretta:

    InputStream is = AppResources.class.getResourceAsStream("DefaultDataBase.sqlite");
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4
    Grazie mille andbin. Mi hai chiarito le idee.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.