12. december 2004 - 20:53Der 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
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.
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?
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 -?".
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?
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
"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.
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".
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.