Forbinde til sqlite database i jar fil

Tags:    java sqlite database jar

Hej udviklere,

så er den gal igen med mit java program.
Jeg forsøger at få det hele pakket som en .jar, og det går da også sådan nogenlunde, bortset fra min database.
Jeg bruger en sqlite database, som jeg forbinder til som følger:
Fold kodeboks ind/udJava kode 

Problemet er bare, at jeg ikke kan finde den når jeg pakker min .jar fil.

Jeg har lavet en resources mappe, som også er sat til at blive pakke med i .jar filen, og hvis jeg pakker .jar arkivet ud, kan jeg da også se at filen godt nok er kommet med.
Jeg ved bare ikke hvordan jeg skal forbinde til den..

Jeg har prøvet med følgende 3 løsninger:
Fold kodeboks ind/udJava kode 

Fold kodeboks ind/udJava kode 


Fold kodeboks ind/udJava kode 


Den første og anden virker begge i netbeans, men fejler når jeg åbner .jar filen.
Den sidste kan godt nok finde filen, både i netbeans og i .jar filen, men melder om adgang nægtet.

I de første to får jeg fejlen:
java.sql.SQLException: path to '/file:\C:\Users\min_bruger\documents\dropbox\program\program.jar!\database': 'C:\file:' does not exist

Og den sidste får jeg som sagt "Adgang nægtet".

Nogen der ved hvordan dælen jeg skal få fat på den fil? Er ved at rive håret ud af hovedet eftersom det er noget af det sidste jeg mangler.

På forhånd mange tak



6 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 10 karma
Sorter efter stemmer Sorter efter dato
SQLite-motoren kræver en fil i et understøttet filsystem, da den bruger den til låse i dens implementering af ACID-transaktioner. SQLite kan derfor ikke bruge et element i en JAR-fil. Du er derfor nødt til at hive databasen ud af JAR-filen til en rigtig fil og derefter åbne den derfra.

Men hvorfor bruger du overhovedet en relationel database? Jeg går ud fra at det er noget statisk data, som du ikke skal ændre på, da det ellers slet ikke ville give mening at proppe det ind i JAR-filen. Og hvis du har med statisk data at gøre, er der som regel mere effektive måder at håndtere det på end en relationel database.



Hey Simon.
Kan ikke gennemskue hvad der er galt i dit projekt. Jeg kunne også godt tænke mig at vide svaret, så håber du finder et løsning.

Men bare en kommentar. Har du overvejet at bruge Hibernate? Ikke mange større projekter bruger JDBC, da JCBC ikke mapper hvad du giver den. Hibernate er et rigtig populært objekt orienteret mapping, som benytter JDBC. Så er du total fri for selv at indsætte alle dine relationer i objekter og gemme dem og så videre...

Læs her:
http://en.wikipedia.org/wiki/Hibernate_%28Java%29

Og tutorial her:
http://www.roseindia.net/hibernate/index.shtml



Indlæg senest redigeret d. 23.04.2011 09:02 af Bruger #5097
Hey Simon.
Kan ikke gennemskue hvad der er galt i dit projekt. Jeg kunne også godt tænke mig at vide svaret, så håber du finder et løsning.

Men bare en kommentar. Har du overvejet at bruge Hibernate? Ikke mange større projekter bruger JDBC, da JCBC ikke mapper hvad du giver den. Hibernate er et rigtig populært objekt orienteret mapping, som benytter JDBC. Så er du total fri for selv at indsætte alle dine relationer i objekter og gemme dem og så videre...

Læs her:
http://en.wikipedia.org/wiki/Hibernate_%28Java%29

Og tutorial her:
http://www.roseindia.net/hibernate/index.shtml


Da det er et eksamensprojekt jeg mere eller mindre er færdig med, synes jeg ikke lige at jeg har lyst til at lave den del om nu - når det andet nu virker fint ;-)

Men hvis jeg nogensinde (af en eller anden mærkelig årsag) skulle finde på at lege med Java igen, vil jeg da lige skrive mig det bag øret..



SQLite-motoren kræver en fil i et understøttet filsystem, da den bruger den til låse i dens implementering af ACID-transaktioner. SQLite kan derfor ikke bruge et element i en JAR-fil. Du er derfor nødt til at hive databasen ud af JAR-filen til en rigtig fil og derefter åbne den derfra.

Men hvorfor bruger du overhovedet en relationel database? Jeg går ud fra at det er noget statisk data, som du ikke skal ændre på, da det ellers slet ikke ville give mening at proppe det ind i JAR-filen. Og hvis du har med statisk data at gøre, er der som regel mere effektive måder at håndtere det på end en relationel database.


Må ærligt indrømme at jeg ikke aner hvad en relationel database er for noget. Jeg fik løst mit problem til sidst, da jeg kom frem til at det simpelthen ikke er muligt at ændre information inde i JAR-filen. Jeg har altså nu min database liggende uden for filen i stedet for.

Det data jeg har med at gøre er navne og klasser for 700 elever og samtidig en tabel hvori man kan knytte andre personer til en elev med navn, adresse, postnummer osv osv.

Som sagt er det et eksamensprojekt der snart skal stå færdig, og jeg har derfor ingen intentioner om at lave de helt store ændringer i programmet nu.

Er dog stødt på et andet problem, der ikke så meget er et problem, men mere en lille irritationsfaktor. For at kunne bruge SQLite databasen, er jeg nødt til at have en andne JAR fil liggende med driveren. Dette bibliotek ligger i min lib mappe ved siden af JAR filen også, men det ville jo være smartere at have den inde i programmet også - er der ikke mulighed for at gøre det på en eller anden måde?



Må ærligt indrømme at jeg ikke aner hvad en relationel database er for noget. Jeg fik løst mit problem til sidst, da jeg kom frem til at det simpelthen ikke er muligt at ændre information inde i JAR-filen. Jeg har altså nu min database liggende uden for filen i stedet for.


Det var lige præcis hvad jeg mente. Du kan ikke ændre i en fil, som ligger i en JAR.

Er dog stødt på et andet problem, der ikke så meget er et problem, men mere en lille irritationsfaktor. For at kunne bruge SQLite databasen, er jeg nødt til at have en andne JAR fil liggende med driveren. Dette bibliotek ligger i min lib mappe ved siden af JAR filen også, men det ville jo være smartere at have den inde i programmet også - er der ikke mulighed for at gøre det på en eller anden måde?


Du kan sagtens slå to JAR-filer sammen til en. Præcis hvordan kan afhænge af hvordan de er opbygget. Måske der er en indstillingsmulighed for det i din NetBeans eksportformular.



Du kan sagtens slå to JAR-filer sammen til en. Præcis hvordan kan afhænge af hvordan de er opbygget. Måske der er en indstillingsmulighed for det i din NetBeans eksportformular.

Synes jeg har ledt godt igennem i netbeans, men synes ikke lige at kunne finde det..



t