Avatar billede mnv_dk Praktikant
27. april 2006 - 10:00 Der er 18 kommentarer og
1 løsning

Postgres: java.sql.SQLException: No suitable driver

Hejsa,

Når jeg kører mit program får jeg følgende fejl:

java.sql.SQLException: No suitable driver
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at Database.<init>(Database.java:20)
        at Gateway.main(Gateway.java:19)
Exception in thread "main" java.lang.NullPointerException
        at Database.SQLget(Database.java:71)
        at Gateway.main(Gateway.java:33)


Den giver jo rimelig meget sig selv.... Men umiddelbart burde den nu kunne finde driveren.

hostname:~$ echo $CLASSPATH
.:/usr/share/java

hostname:~$ ls -a /usr/share/java
.  pg74.216.jdbc1.jar    pg74.216.jdbc2.jar  postgresql-8.1-405.jdbc2ee.jar  postgresql-jdbc2-7.4.7.jar  postgresql-jdbc3-7.4.7.jar
..  pg74.216.jdbc2ee.jar  pg74.216.jdbc3.jar  postgresql.jar                  postgresql-jdbc2.jar        postgresql-jdbc3.jar

Er der nogle gode tips, der kunne løse dette problem, så vidt jeg ved, og syntes at kunne huske skulle det bare virke sådan
Avatar billede thomaswinterberg Nybegynder
27. april 2006 - 10:44 #1
Kan du ikke smide din source kode der connecter til postgres ?
Avatar billede mnv_dk Praktikant
27. april 2006 - 10:47 #2
try {
    Class.forName("org.postgresql.Driver");
      }catch (ClassNotFoundException e){
      }
      try {
        db = DriverManager.getConnection("jdbc:postgresql://hostname/" + dbName,"bruger","kode");
      } catch (SQLException e) {
        e.printStackTrace();
      }


Det virker dog fint på min udviklingsmaskine, hvor jeg laver det i Eclipse
Avatar billede arne_v Ekspert
27. april 2006 - 13:07 #3
nope

classpath indeholder enten dirs med class filer eller jar filer med classfiler

dirs med jar filer ignoreres
Avatar billede arne_v Ekspert
27. april 2006 - 13:08 #4
forkert - jar filer i dirs ignoreres - de class filer der er i dir
bruges selvfølgelig selvom der er jar filer i dir også
Avatar billede arne_v Ekspert
27. april 2006 - 13:08 #5
så ret din classpath til at indeholde selve jar filen
Avatar billede mnv_dk Praktikant
27. april 2006 - 13:35 #6
Ok...
I henhold til: http://jdbc.postgresql.org/download.html skal jeg bruge pg74.216.jdbc3.jar

hostname:~$ echo $CLASSPATH
/usr/share/java/pg74.216.jdbc3.jar

hostname:~$ java -version
java version "1.5.0_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)

Den giver dog stadig fejlen.
Avatar billede arne_v Ekspert
28. april 2006 - 02:33 #7
prøv lige:

    Class.forName("org.postgresql.Driver");
      }catch (ClassNotFoundException e){
        e.printStackTrace();
      }

så vi kan se hvad der sker.
Avatar billede arne_v Ekspert
28. april 2006 - 02:34 #8
og vis lige kommandoe linien du bruger til at starte med

og fejlmeddelsen nu
Avatar billede arne_v Ekspert
28. april 2006 - 02:35 #9
og jeg ville nok også prøve at putte den direkte i classpath - altså:

java -classpath .:/usr/share/java/pg74.216.jdbc3.jar resten af argumenterne
Avatar billede mnv_dk Praktikant
28. april 2006 - 11:02 #10
Jeg er overbevist om at det er et problem med classpath.... Men, lidt info her, har kørt en stacktrace:

java.lang.ClassNotFoundException: org.postgresql.Driver
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at Database.<init>(Database.java:16)
        at Gateway.main(Gateway.java:19)

Jeg kører:

hostname:~$ java -cp /usr/share/java/pg74.216.jdbc3.jar -jar program.jar

Samme resultat med og uden classpath, hvilket undrer mig en del.
Avatar billede mnv_dk Praktikant
28. april 2006 - 11:09 #11
selve filen pg74.216.jdbc3.jar har rettigheder -rwxr-xr-x og er ejet af den bruger der kører programmet, så heller ikke der ser jeg et problem
Avatar billede arne_v Ekspert
28. april 2006 - 12:39 #12
kan du give den r for alle ?
Avatar billede arne_v Ekspert
28. april 2006 - 12:39 #13
kan du checke at jar filen er OK ?

jar tvf /usr/share/java/pg74.216.jdbc3.jar
Avatar billede mnv_dk Praktikant
28. april 2006 - 12:48 #14
Den er R for alle, den giver ingen fejl, når jeg tjekker den.
Avatar billede mnv_dk Praktikant
02. maj 2006 - 09:16 #15
Ok... Der er åbenbart en løsning :)

Når man køre java med -jar overskriver den ALLE indstillinger for classpath, så det man skal gøre er:

java -cp /usr/share/java/pg74.216.jdbc3.jar:program.jar MainClass

Så virker det :)
Avatar billede arne_v Ekspert
02. maj 2006 - 13:13 #16
og det adskiller sig fra 28/04-2006 02:35:55 ved ?
Avatar billede mnv_dk Praktikant
02. maj 2006 - 13:25 #17
At selve programmet ikke er i classpath, og blev kørt med -jar .

Men hvis det er fordi du mener du er berettiget til point, uden at give et fuktionalt svar skal jeg da gerne oprette et nyt spørgsmål du kan smide et svar i, hvis det redder din dag.
Avatar billede arne_v Ekspert
02. maj 2006 - 17:11 #18
nu ved jeg ikke hvad du mener med funktionel

det var som jeg forstaar dig det at putte driver jar filen i classpath
der loeste problemet

og mit eksempel brugte ikke -jar, men havde baade din kode og driver
jar i classpath

det eneste mit eksempel manglede var at:

. skulle erstattes af navnet paa din jar fil, men da jeg postede det
fremgik det ingen steder at din kode laa i en jar fil og slet ikke navnet,
saa jeg antog at det var class filer i current dir

"resten af argumenterne" skulle erstattes af navnet paa din main klasse
som jeg heller ikke kendte paa det tidspunkt (foruden at du jo ogsaa kunne have
nogle -D eller nogle argumenter til programmet som jeg ikke kendte)

konceptet var god nok

den praecise kommandolinie kunne jeg naturligvis ikke angive
da jeg ikke vidste at din kode var i en jar fil, ikke kendte navnet paa
din jar fil eller navnet paa din main class
Avatar billede mnv_dk Praktikant
03. maj 2006 - 10:19 #19
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester