Avatar billede velle Nybegynder
12. december 2004 - 20:53 Der er 24 kommentarer og
1 løsning

Problemer med JDBC driver

Hejsa

* Jeg har en fungerende MySQL server kørende på maskinen.
* Jeg har hentet mysql-connector-java-3.1.5-gamma, og kopieret filen mysql-connector-java-3.1.5-gamma-bin.jar til C:\j2sdk1.4.2_06\jre\lib\ext
* Genstartet (for at udelukke det som fejl)

Jeg skulle mene at så skulle følgende program virke.

public class Jdbc11 {
    public static void main(String[] args) throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        //kode,kode,kode
    }
}

Det kompilerer fint, men når jeg kører det får jeg:

C:\java>java Jdbc11
Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

Hvad er der galt?
Avatar billede arne_v Ekspert
12. december 2004 - 20:58 #1
Hvad med:

C:\j2sdk1.4.2_06\bin\java Jdbc11

?
Avatar billede velle Nybegynder
12. december 2004 - 21:02 #2
Fuldstændigt korrekt... hvad betyder det?
Avatar billede arne_v Ekspert
12. december 2004 - 21:04 #3
Jeg tror at java kommandoen kører en anden java installation end den
hvor du har smidt driveren i ext dir i !
Avatar billede arne_v Ekspert
12. december 2004 - 21:05 #4
java kommandoen uden eksplicit angivelse af sti
Avatar billede velle Nybegynder
12. december 2004 - 21:12 #5
Hvordan skal jeg fikse det?

Jeg har netop tjekket i Tilføj/Fjern Programmer og der er:
* Java 2 Runtime Enviroment, SE v1.4.2_06
* Java 2 SDK, SE v1.4.2_06

Jeg ved ikke om det blot skulle vises som én? Altså om der under SDK er endnu en JRE.
Avatar billede velle Nybegynder
12. december 2004 - 21:15 #6
Jeg har tjekket min path variabel, og det eneste dir, der har med java at gøre er "C:\j2sdk1.4.2_06\bin". Men jeg kan huske at inden jeg tilføjede den mappe, virkede "java"-kommandoen fint.
Avatar billede arne_v Ekspert
12. december 2004 - 21:16 #7
java kommandoen virker også fint

den kan bare ikke finde den jar fil du har smidt i ext
Avatar billede arne_v Ekspert
12. december 2004 - 21:17 #8
Måske skal den ligges i
  C:\Program Files\Java\j2re1.4.2_06\lib\ext
Avatar billede arne_v Ekspert
12. december 2004 - 21:18 #9
Men efter min mening er det noget møg at smide jar filer i ext !

java -classpath C:\dir\noget.jar Program

Den er meget mere uproblematisk.
Avatar billede velle Nybegynder
12. december 2004 - 21:51 #10
Ok, nu har jeg lavet et eller andet skidt :-/

Først prøvede jeg med java -classpath fullpath\for\jarfile.jar

Men det virkede ikke, den listede alle de mulige kommandoprompt argumenter til "java", som om -classpath ikke er et gyldigt argument. Så kiggede jeg lidt i dokumentationen til MySQL Connector/J Documentation, som skrev at jeg skulle bruge set CLASSPATH=fullpath\for\jarfile.jar;%CLASSPATH%. Dvs. jeg lagde hele mappen med Connector/J ind under c:\mysql\ og skrev:

set CLASSPATH=C:\mysql\mysql-connector-java-3.1.5-gamma;%CLASSPATH%

Bogstaveligt! Ved ikke om jeg skal udskifte %classpath% med noget. Men muligvis er jeg kommet til at udelade  ;%CLASSPATH% den første gang jeg skrev det.

I hvert tilfælde er sagen nu den at jeg uanset hvad jeg forsøger at køre med "java" får:

C:\J2SDK1~1.2_0\bin>java Test
Exception in thread "main" java.lang.NoClassDefFoundError: Test

Som det ses også når jeg forsøger fra bin-mappen.

Hvad har jeg gjort, og hvordan får jeg rettet op på det?
Avatar billede arne_v Ekspert
12. december 2004 - 21:53 #11
Du skulle nok bare have brugt:

java -classpath "C:\dir med mellemrum\noget.jar" Program
Avatar billede arne_v Ekspert
12. december 2004 - 21:53 #12
Hvis du bare har udført den

set CLASSPATH

i en DOS box, så lukker du bare den og åbner en ny !

(den er lokal for et DOS vindue)
Avatar billede arne_v Ekspert
12. december 2004 - 21:54 #13
Jeg er helle rikke så glad for brug af den globale CLASSPATH.

Men hvis du skal bruge den så:

set CLASSPATH=.;C:\dir\noget.jar

. gør at den kan finde class filer i current dir
Avatar billede velle Nybegynder
12. december 2004 - 22:18 #14
Ok, nu genstartede jeg lige, og så kunne den da heldigvis godt eksekvere de programmer som også virkede før.

Du skrev at det kunne skyldes at jeg havde udeladt gåseøjn i en path med white space, men det er ikke tilfældet. Efter genstart har jeg forsøgt:

C:\java>java -classpath c:\j2sdk1.4.2_06\jre\lib\ext\mysql-connector-java-3.1.5-
gamma-bin.jar

C:\java>java -classpath "c:\j2sdk1.4.2_06\jre\lib\ext\mysql-connector-java-3.1.5-
gamma-bin.jar"

Var det ikke det du mente? Men ved begge forsøg lister den alle de mulige argumenter, dvs. som "java -?".

Jeg tænkte om det kunne skyldes at .jar filen er corrupted, så jeg kopierede en tilfældig dnsns.jar til c:\ og brugte "java -classpath c:\dnsns.jar", men fik resultatet af "java -?".
Avatar billede arne_v Ekspert
12. december 2004 - 22:21 #15
Der mangler vel et program navn !?

C:\java>java -classpath c:\j2sdk1.4.2_06\jre\lib\ext\mysql-connector-java-3.1.5-
gamma-bin.jar Jdbc11
Avatar billede velle Nybegynder
12. december 2004 - 22:29 #16
Sorry, det var dumt. Troede at "java -classpath", gjorde JRE opmærksom på hvor den skulle lede, i eftertiden.

Sidstnævnte virker med en lille detalje til forskel (".;" foran værdien til classpath)

C:\java>java -classpath .;c:\mysql\mysql-connector-java-3.1.5-gamma\mysql-connec
tor-java-3.1.5-gamma-bin.jar;%CLASSPATH% Jdbc11
Avatar billede arne_v Ekspert
12. december 2004 - 22:36 #17
Så du er kørende nu ?
Avatar billede velle Nybegynder
12. december 2004 - 22:43 #18
Jeps.

Men jeg bliver lige nødt til at høre hvordan du vil råde mig til at gøre for at undgå at skulle skrive den lange sti hver gang jeg vil køre. Hvordan kan det være at både global classpath og at flytte til ext-mappen er dårlige løsninger, og er der evt. alternativer til de tre?

Jeg går ud fra at jeg ville få de samme problemer hvis jeg kompilerer og kører fra et IDE?
Avatar billede arne_v Ekspert
12. december 2004 - 22:48 #19
ext:
  - overvej hvad der kan ske, når du installerer en ny Java version og sletter den gamle
  - overvej hvis du har brug for flere versioner af samme software til forskellige
    applikationer

global CLASSPATH:
  - overvej hvis du har brug for flere versioner af samme software til forskellige
    applikationer
Avatar billede arne_v Ekspert
12. december 2004 - 22:50 #20
"lære programmer":
  lav en bat fil som kører programmet

"seriøse programmer":
  pak dine class filer i en jar fil
  tilføj et Main-Class direktiv som peger på din main class til manifest
  tilføj et Class-Path direktiv som peger på de jar filer som skal bruges til manifest
så dobbletklikker du bare på din jar fil og windows starter java og udfra manifestet
finde den slev både main class og andre jar filer.
Avatar billede arne_v Ekspert
12. december 2004 - 22:51 #21
Hvis du tilføjer en jar fil til dit projekt så vil din IDE både compile
med den i classpath og køre programmerne med den i classpath.
Avatar billede velle Nybegynder
12. december 2004 - 22:52 #22
For god ordens skyld må jeg nok hellere rette mig selv

C:\java>java -classpath .;c:\mysql\mysql-connector-java-3.1.5-gamma\mysql-connec
tor-java-3.1.5-gamma-bin.jar Jdbc11

Virker lige så vel som førnævnte, dvs. uden det afsluttende ";%CLASSPATH%". Tvivler på om %CLASSPATH%, virker som værdi til "java -classpath", i hvert tilfælde kan "file.jar;%CLASSPATH%" ikke erstatte ".;file.jar".
Avatar billede velle Nybegynder
12. december 2004 - 22:55 #23
Tak, du må gerne lægge et svar.
Avatar billede arne_v Ekspert
12. december 2004 - 22:56 #24
svar
Avatar billede arne_v Ekspert
12. december 2004 - 22:56 #25
om igen
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