03. juli 2003 - 00:06Der er
28 kommentarer og 1 løsning
JDBC og MySQL
Hej
Jeg har forgæves prøvet at få en MySQL connection op at køre i java, men det vil ikke lykkes. Jeg har hentet "mysql-connector-java-3.0.8-stable-bin.jar" fra mysql.com og placeret denne i "C:\Program Files\j2sdk1.4.1_01\jre\lib\ext" og i "C:\Program Files\Java\j2re1.4.1_01\lib\ext" da jeg kører Windows XP.
Jeg kan fint kompilere koden, men når jeg prøver at eksekvere filen med java melder den fejl ved:
Could not load mysql driver. java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at java.net.URLClassLoader$1.run(URLClassLoader.java:198) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:186) at java.lang.ClassLoader.loadClass(ClassLoader.java:299) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265) at java.lang.ClassLoader.loadClass(ClassLoader.java:255) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:140) at Klasse.main(Klasse.java:18) java.sql.SQLException: No suitable driver
Nope, den kan ikke finde driveren. Hvorfor ikke - hvad har jeg gjort galt.
Ok.. Det her er mærkeligt arne_v s kommentar virker rent faktisk. Men selvom jeg prøvede at sætte classpath til C:\....\mysql-connector-java-3.0.8..... og programstien virkede det ikke. Men det her lader til at virke.
Dog var jeg ude på at det ikke skulle være nødvendigt at sætte sin classpath overhovedet, da jeg gerne ville være fri for den lange kommando hver gang.
Jeg har brugt klassen cs1 i mit studie, og den har virket fint nok ved bare at blive lagt i "C:\Program Files\j2sdk1.4.1_01\jre\lib\ext" og i "C:\Program Files\Java\j2re1.4.1_01\lib\ext". Hmm.. Er filens navn for langt eller skal den hedde noget andet? Eller hvorfor virker det ikke!
Et manifest er en "indholds beskrivelse" af en jar-fil.
Man kan angive forskellige ting bl.a. main class og classpath.
Så i.s.f.: java -classpath mystuff.jar,externalstuff.jar mypackage.MyClass kan man nøjes med: java -jar mystuff.jar fordi manifestet i mystuff.jar angiver at main clas er mypackage.MyClass og classpath indeholder externalstuff.jar
Hvis man arbejder på Windows og ens Java er korrekt installeret, så kan man oveniøbet køre ved bare at dobbelt-klikke på jar-filen i Windows Explorer !
Ok, men det lyder da så fair nok. Dog stadig mystisk at den ikke vil bruge den i ext-biblioteket.
Jeg har ikke rigtig forstået det med class-filer helt. Hvordan laver jeg en JAR-fil med alle class-filer i. Hvordan laves "manifestet" som du skriver og hvad indeholder det egentlig.
Jeg har i forskellige programmer set, at man ligger nogle class-filer i andre mapper. Det er også meget smart for at få lidt struktur, men hvordan kan jeg "komme i kontakt" med class-filerne i mapperne liggender derover. Dvs. jeg kan jo sagtens blot skrive mappenavn.class for at gå nedad i mapperne, men hvordan kommer jeg opad (eller udad).
Hvis du har følgende struktur: C:\myproject\Main.java (no package, import util.* import comutil.*) C:\myproject\util\SomeUtil.java (package util) C:\common\comutil\OtherUtil.java (package comutil)
Så skal du compile og køre med:
-classpath C:\myproject;C:\common
d.v.s. at classpath skal pege på roden over pakkerne.
Ok. Jeg har i sin tid lavet lille "Dilemma"-spil som en aflevering.
Jeg bruger en jar-fil cs1.jar, indeholdende en klasse cs1.Keyboard. Jeg har nu i et separat bibliotek placeret de tre class-filer sammen med cs1.jar-filen. (Ja, der er lige SQLException i det andet program som startede denne tråd - derfor jeg lige skriver anderledes).
Dvs. i mappen jar, ligger nu flg. cs1.jar Dilemma.class Player.class Confront.class manifest.mf (indeholder : "Main-Class: Dilemma")
Dette vil jeg gerne have pakket ned i en jar-fil. Dvs. hvis jeg skriver sådan her: D:\Dok....\jar>jar cvmf manifest.mf Dilemma.jar *.class cs1.jar added manifest adding: Confront.class(in = 900) (out= 522)(deflated 42%) adding: Dilemma.class(in = 1491) (out= 831)(deflated 44%) adding: Player.class(in = 1795) (out= 1043)(deflated 41%) adding: cs1.jar(in = 2644) (out= 2431)(deflated 8%)
Nu vil jeg så gerne køre dette: D:\Dokumenter\skole\DM01\aflevering02\jar>java -jar Dilemma.jar Failed to load Main-Class manifest attribute from Dilemma.jar
Hvad er der galt - noget med manifest filen! Ja, jeg kan ikke rigtig se hvad der er galt helt præcist!
D:\DOKU....\jar>java -jar cvmf Dilemma.jar Exception in thread "main" java.util.zip.ZipException: The system cannot find th e file specified at java.util.zip.ZipFile.open(Native Method) at java.util.zip.ZipFile.<init>(ZipFile.java:112) at java.util.jar.JarFile.<init>(JarFile.java:117) at java.util.jar.JarFile.<init>(JarFile.java:55)
Ok. Der er fejl. Jeg har dog erhvervet mig den viden at jar-filer som standard i windows eksekveres med javaw:
Hvad angår det med biblioteker har jeg stadig lidt problemer. Jeg befinder mig i C:\myproject - hvor mit projekts main-class ligger. Herfra eksekveres programmet. Jeg har nu en undermappe Bib hvori der ligger en klasse "Klasse", som jeg ønsker at eksekvere. Dette bør kunne gøres vha. Bib.Klasse.method(); Ok, men i min Bib.Klasse.method() ønsker jeg at referere til en klasse i C:\myproject\Bib2\ som f.eks. hedder "Klasse2". Hvordan styrer jeg klasserne i C:\myproject\Bib2\ og i C:\myproject\ fra klasserne i C:\myproject\Bib\ ?
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.