Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[JAVA] [ACCESS] Access driver (unknown) is not a valid path

Pagina: 1
Acties:

  • speedzor
  • Registratie: Maart 2008
  • Laatst online: 01-02-2014
Goeiemorgen

Ik heb een klein programma in Java gemaakt dat een verbinding legt met een Access database. Gisterenmiddag werkte alles naar behoren en dus dacht ik het te exporteren naar een runnable jar file. Na dit gedaan te hebben en het programma uit te voeren kreeg ik de eerste twee JFrames wel te zien, maar van zodra het JFrame met de database connectie moest openen kreeg ik deze error te zien.

Afbeeldingslocatie: http://i.imgur.com/u5nVO.png

Ik heb hierna alles teruggedraaid naar de laatste versie op de svn server maar dit maakte geen verschil. Op mijn laptop doet het probleem zich ook voor.

Ik heb google erop nageslagen en kwam veel mensen tegen met hetzelfde probleem, maar daar lag het probleem veelal bij het feit dat er geen permissies waren om de database aan te spreken die op een externe drive stond. Bij mij bevindt de database zich in \src\resources\.

Dit is mijn connectie naar de database:
Java:
1
2
3
4
5
6
private static final String JDBC_DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";
private static final String DATABASE_URL ="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=\\resources\\passwords.accdb";
private static final String DATABASE_USER = "Anything"; // Any value that's not empty
private static final String DATABASE_PASSWORD = "tweakers";
Class.forName(JDBC_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD);


Ik heb gemerkt dat veel oplossingen aanraden om een System DSN aan te maken. Ik heb dit even nagekeken (odbcad32.exe) en er staan geen bronnen in mijn System DSN tabblad. Ik heb geprobeerd om er één toe te voegen door de source name op 'passwords' te zetten en te linken naar de database in mijn project, maar dit maakte geen verschil.

Verder heb ik geprobeerd om dit te installeren, ook zonder resultaat.

Bij het tabblad User DSN heb ik wel een bron voor een MS Access Database staan, maar die schijnt niet te werken. Deze errors verschijnen wanneer ik de Access driver wil configureren:

Afbeeldingslocatie: http://i.imgur.com/XRzip.jpg
Afbeeldingslocatie: http://i.imgur.com/OOQJc.jpg

Heeft iemand een idee hoe ik dit zou kunnen oplossen?

Streaming History


  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
Ik vermoed dat je database pad gewoon niet klopt. Volgens mij is dat een absoluut pad wat je daar hebt staan (\resources\passwords.accdb) en geen relatief pad.

Ander vraagje: moet je perse Access gebruiken?

[ Voor 13% gewijzigd door Hydra op 07-11-2012 11:49 ]

https://niels.nu


  • speedzor
  • Registratie: Maart 2008
  • Laatst online: 01-02-2014
Hydra schreef op woensdag 07 november 2012 @ 11:48:
Ik vermoed dat je database pad gewoon niet klopt. Volgens mij is dat een absoluut pad wat je daar hebt staan (\resources\passwords.accdb) en geen relatief pad.
Ik heb even gekeken hoe ik naar het pad van afbeeldingen ga en dat is
code:
1
"img/flag_EN.png"


Ik heb enkele opties uitgeprobeerd
code:
1
2
3
4
5
DBQ=//resources//passwords.accdb
DBQ=resources//passwords.accdb
DBQ=\\resources\\passwords.accdb
DBQ=.//resources//passwords.accdb
DBQ=.//passwords.accdb


zonder resultaat. Bij de laatste poging gaf ik de map niet mee en kreeg ik een verschillende error die er specifiek om gaat dat het bestand niet gevonden kon worden (en dus betekent dat dit niet het probleem was).
Hydra schreef op woensdag 07 november 2012 @ 11:48:
Ander vraagje: moet je perse Access gebruiken?
Zeker niet, maar Access is de database die we gebruiken in school en dus heb ik gewoon die connectie klasse overgenomen. Ondertussen ben ik er inderdaad wel al achter dat ik dit niet meer ga doen in het vervolg.

Streaming History


Verwijderd

Mijn eerste vermoeden is dat je driver de database file niet kan vinden relatief gezien aan de application path. Dit komt omdat je hem in een jar file hebt geplaatst. Maar dat krijg je die driver niet duidelijk. Die zoekt op je filesystem.

Als quick test kan je de 'resources\\passwords.accdb' ff kopieren naast je Jar file. Doet die het dan wel, dan weet je het zeker.

  • speedzor
  • Registratie: Maart 2008
  • Laatst online: 01-02-2014
Verwijderd schreef op woensdag 07 november 2012 @ 12:38:
Mijn eerste vermoeden is dat je driver de database file niet kan vinden relatief gezien aan de application path. Dit komt omdat je hem in een jar file hebt geplaatst. Maar dat krijg je die driver niet duidelijk. Die zoekt op je filesystem.

Als quick test kan je de 'resources\\passwords.accdb' ff kopieren naast je Jar file. Doet die het dan wel, dan weet je het zeker.
Ik krijg deze error ook wanneer ik het programma uitvoer in Eclipse, zonder jar file dus.

Toch even je suggestie getest en het maakt wel degelijk geen verschil.

Streaming History


  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
speedzor schreef op woensdag 07 november 2012 @ 12:31:
[...]


Ik heb even gekeken hoe ik naar het pad van afbeeldingen ga en dat is
code:
1
"img/flag_EN.png"


Ik heb enkele opties uitgeprobeerd
code:
1
2
3
4
5
DBQ=//resources//passwords.accdb
DBQ=resources//passwords.accdb
DBQ=\\resources\\passwords.accdb
DBQ=.//resources//passwords.accdb
DBQ=.//passwords.accdb
Ik krijg het idee dat je maar wat probeert. Wat is in die .jar file de 'huidige' directory. Dit is afhankelijk van hoe en waar je 'em execute. Als het goed is kun je dat met System.out.println(new File(".").getAbsolutePath()); achterhalen. Je moet zorgen dat dat pad in die driver relatief is t.o.v. je execution directory. Wat ik meestal doe is gewoon een /data subdir aanmaken waar mijn database in staat. Zelf gebruik ik meestal in-process databases zoals SqLite of HSQLDB (laatste heeft m'n voorkeur).

https://niels.nu


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
speedzor schreef op woensdag 07 november 2012 @ 12:41:
[...]
Ik krijg deze error ook wanneer ik het programma uitvoer in Eclipse, zonder jar file dus.
Ok, dus begin van de oplossing is simpel : Draai alle wijzigingen sinds gister terug, want de kaboutertjes hebben het niet gesloopt overnacht.

Als het gisteren wel werkte en in exact dezelfde setting vandaag niet meer dan heb jij een fout gemaakt.

Dus stappenplan :
- Backup van gisteren/eergisteren terugzetten totdat het wel weer werkt
- Dan pas jar proberen en de rest van de tips in dit topic doornemen.

  • speedzor
  • Registratie: Maart 2008
  • Laatst online: 01-02-2014
Ok, ik heb jullie suggesties gecombineerd en ik vermoed dat het probleem inderdaad ligt bij het aanwijzen van de database.

Ik heb alles 2 revisies terug gezet, daarmee sla ik één over waarin ik het login veld van een tekstveld naar een wachtwoordveld veranderd heb.
Verder heb ik een aparte package 'data' gemaakt en daarin de database gekopieerd.

Wanneer ik het programma uitvoer in eclipse met de originele database (die in geen enkele package zit, mogelijks is dat een probleem?) dan gaat alles naar behoren.

Wanneer ik het programma uitvoer als jar file met de originele database dan krijg ik de 'Could not find file (unknown)' error, wat de standaard error is om aan te geven dat er geen database kan gevonden worden. Als ik de jar extract dan zie ik inderdaad dat er geen database instaat.

Wanneer ik het programma uitvoer in eclipse met de nieuwe database (.\\src\\data\\passwords.accdb) dan werkt alles naar behoren.

Wanneer ik het programma uitvoer als jar file met de nieuwe database dan krijg ik de error die je in de OP ziet staan. Als ik dan de jar extract dan zie ik toch de database in de data folder staan.

Om jullie een overzicht te geven heb ik even alles gebundeld in een screenshot want ik heb eerlijk geen idee hoe ik dit moet oplossen.

Afbeeldingslocatie: http://i.imgur.com/wX4Tc.jpg

Streaming History


  • Ozzie
  • Registratie: Februari 2004
  • Laatst online: 09:07
Word er geen exception gegooid?
Als je je jar uitvoert vanaf de command line krijg je die te zien.

Daarnaast zou ik zelf ook niet voor een Access database kiezen. Je programma werkt dan namelijk alleen op Windows.
Voor simpele databases ben ik altijd een fan van Derby. Is gewoon een jar op je classpath zetten en je kan ermee aan de slag. Alhoewel ik meestal gewoon PostgreSQL of MySQL gebruik vanwege de beheertools die daarbij zitten.

"Write code as if the next maintainer is a vicious psychopath who knows where you live."


  • Jegorex
  • Registratie: April 2004
  • Laatst online: 03-09 23:24
speedzor schreef op woensdag 07 november 2012 @ 14:07:
Wanneer ik het programma uitvoer als jar file met de nieuwe database dan krijg ik de error die je in de OP ziet staan. Als ik dan de jar extract dan zie ik toch de database in de data folder staan.
Kan ik hieruit opmaken dat je de database IN de jar file hebt staan? Voor zover ik weet is het niet mogelijk data in de jar file die word uitgevoerd aan te passen.
Plaats je database buiten de jar file en kijk of het dan wel werkt.

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
Jegorex schreef op woensdag 07 november 2012 @ 17:54:
[...]

Kan ik hieruit opmaken dat je de database IN de jar file hebt staan? Voor zover ik weet is het niet mogelijk data in de jar file die word uitgevoerd aan te passen.
Plaats je database buiten de jar file en kijk of het dan wel werkt.
Dat had je dan in de TS wel ff mogen zeggen. Files in je Jar zijn niet als files benaderbaar. Een access database (waar ook continue naar geschreven wordt) in je Jar file zetten gaat gewoon absoluut niet werken. Daar is een .jar ook niet voor bedoeld.

https://niels.nu


  • speedzor
  • Registratie: Maart 2008
  • Laatst online: 01-02-2014
Dit is de stacktrace die ik krijg wanneer ik wanneer ik de jar file uitvoer in de commandline (als link gezet vanwege de grote afbeelding). Het enige dat ik er van opmaak is dat de source niet gevonden is.

In combinatie met wat jegorex zei heb ik de database ernaast gezet en het pad absoluut gemaakt en het programma werkt.

Op zich moet het dus werken, maar ligt het aan het relatief/absoluut pad.
Kan iemand me helpen met het correcte relatieve pad te vinden?

Het project noemt 'PasswordViewer' en bevindt zich op "C:\Users\Jeroen\Documents\Projects\PasswordViewer".

De structuur in de map 'Projects is:
  • PasswordViewer
  • passwords.accdb
  • PWV.jar
De mapstructuur in de jar file is als volgt
  • bin
  • lib
  • src
    • data
    • domein
    • img
    • persistentie
      • Connectie.java
    • resources
    • ui
    • util
    Startup.java

Streaming History


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Tsja, blijkbaar is de huidige directory een andere als je het zelf vanaf de command line uitvoert. :p "." verwijst dan naar iets anders, en die "(unknown)" is gewoon een onhandige foutmelding van MS. Een DSN hoef je verder niet te gebruiken.

(En je kunt de huidige directory opvragen met new File(".").getAbsolutePath())

Edit: waarom HSQLDB en geen H2 trouwens?

[ Voor 9% gewijzigd door pedorus op 07-11-2012 20:32 ]

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • speedzor
  • Registratie: Maart 2008
  • Laatst online: 01-02-2014
Opgelost! De fout lag hem erin dat ik steeds "..\\" gebruikte. De juiste oplossing was "DBQ=.\\passwords.accdb".

Streaming History


  • Ozzie
  • Registratie: Februari 2004
  • Laatst online: 09:07
Als je de volgende keer weer met een (simpele) database gaat werken kan ik Derby aanraden.

Op deze pagina staat een tutorial over het gebruik van Derby:
http://www.oracle.com/tec...javase/javadb-141163.html

Of H2, heb ik zelf nog nooit gebruikt maar wordt wel vaak genoemd:
http://www.h2database.com/html/tutorial.html

"Write code as if the next maintainer is a vicious psychopath who knows where you live."

Pagina: 1