Avatar billede mik28 Seniormester
25. august 2003 - 11:07 Der er 71 kommentarer og
1 løsning

problem med placering af mysql driver

Hej Eksperter,

Min mysqldriver hedder mm.mysql-2.0.4-bin og ligger i jre/lib/ext i mit java bibliotek. Jeg henviser til den med com.mysql.jdbc.Driver når jeg opretter en DB-forbindelse. Jeg får en classnotfoundexception, så det lader til at driveren ligger forkert, men hvor skal den så ligge?
Avatar billede olly Nybegynder
25. august 2003 - 11:24 #1
Sikker på det er den rigtige jvm du så bruger?

Hvis du f.eks. har en jdk installeret så vil den typisk ogå installere en jre i c:\programmer\java eller sådan noget...

Prøv at se om du måske kan smider driveren der og så virker det?
Avatar billede mik28 Seniormester
25. august 2003 - 11:25 #2
det er jeg ret sikker på :-)
Avatar billede olly Nybegynder
25. august 2003 - 11:26 #3
Det er da et forsøg værd???
Avatar billede mik28 Seniormester
25. august 2003 - 11:30 #4
jeg er bange for jeg ikke forstår hvad det er jeg skal gøre? Jeg har en tilsvarende app kørende på min linux maskine og der er ikke nogen problemer. Der ligger driveren i jre/lib/ext
Avatar billede olly Nybegynder
25. august 2003 - 11:32 #5
Hvis det er på en windåse...

c:\programmer\java14\jre\lib\ext

Prøv at ligge den der...

Så vidt jeg husker så har man også kun en jre på en linuxbox...
Avatar billede mik28 Seniormester
25. august 2003 - 11:33 #6
Det er lige præcis der den ligger
Avatar billede olly Nybegynder
25. august 2003 - 11:34 #7
okay...

Hved så med i c:\jdk1.4\jre\lib\ext?

Måske det så er den jre den bruger?
Avatar billede mik28 Seniormester
25. august 2003 - 11:48 #8
der syntes ikke at være noget som hjælper :-(
Avatar billede mik28 Seniormester
25. august 2003 - 11:49 #9
jeg har prøvet at smide driveren begge steder
Avatar billede olly Nybegynder
25. august 2003 - 11:50 #10
Lyder underligt...

Der er selvfølgelig altid at smide den i c:\ og så sætte classpath til c:\mm.mysql-2.0.4-bin.jar
Avatar billede mik28 Seniormester
25. august 2003 - 11:51 #11
er det den forkerte driver?
Avatar billede mik28 Seniormester
25. august 2003 - 11:52 #12
Helt konkret gør jeg således

Databaseforbindelsemysql d = new Databaseforbindelsemysql("jdbc:mysql://192.168.1.11/DB?user=USER&password=PASS","com.mysql.jdbc.Driver");
Avatar billede mik28 Seniormester
25. august 2003 - 11:53 #13
package util;
import java.sql.*;


public class Databaseforbindelsemysql
{
    private Connection conn ;
    private Statement stmt;
       
    public Databaseforbindelsemysql(String data, String driver)
    {
       
        try
        {
            Class.forName(driver);
            conn = DriverManager.getConnection(data, "", "");
            stmt = conn.createStatement();
        }
        catch(Exception s)
        {
            System.out.println("SQL dataforbindelse fejlede"+s);
        }   
    }
   
    public ResultSet select(String sql)
    {
        ResultSet r = null;
        try
        {
            r = stmt.executeQuery(sql);
        }
        catch(SQLException s)
        {
            System.out.println("Select fejlede: "+s);
        }       
        return r;
    }
   
    public void insertUpdate(String sql)
    {
        try
        {
            stmt.executeUpdate(sql);
        }
        catch(SQLException s)
        {
            System.out.println("update/insert fejlede");
        }       
    }
   
    public void close()
    {
        try
        {
            stmt.close();
        }
        catch(SQLException s)
        {
            System.out.println("Close fejlede");
        }
       
    }
}
Avatar billede olly Nybegynder
25. august 2003 - 11:59 #14
Nej driveren er rigtig nok så vidt jeg kan se...
Avatar billede mik28 Seniormester
25. august 2003 - 12:00 #15
så fatter jeg virkelig ikke en meter :-(
Avatar billede olly Nybegynder
25. august 2003 - 12:01 #16
Hvis du får en classnotfound så er det driveren hvis det er i den try/catch den går galt...
Avatar billede mik28 Seniormester
25. august 2003 - 12:03 #17
det kan jeg jo lige sikre mig at det er :-)
Avatar billede mik28 Seniormester
25. august 2003 - 12:05 #18
Det er her det går galt

try
        {
            Class.forName(driver);
            conn = DriverManager.getConnection(data, "", "");
            stmt = conn.createStatement();
        }
        catch(Exception s)
        {
            System.out.println("SQL dataforbindelse fejlede"+s);
        }
Avatar billede mik28 Seniormester
25. august 2003 - 12:07 #19
classnotfoundexception: com.mysql.jdbc.Driver
Avatar billede olly Nybegynder
25. august 2003 - 12:09 #20
Tror jeg har fundet den

jdbc:mysql://192.168.1.11/DB?user=USER&password=PASS

Dur ikke rigtigt så vidt jeg kan se

Den skal hedde

Connection con = DriverManager.getConnection(url,
                    "myLogin", "myPassword");

Så du skal vel skilde url og use/pass
Avatar billede mik28 Seniormester
25. august 2003 - 12:11 #21
nej det er såmend rigtigt nok som det er. Det virker jo fint på min linux maskine
Avatar billede olly Nybegynder
25. august 2003 - 12:13 #22
Rigtigt...

Jamen så må det jo være driveren

Hvad Windows OS?
Avatar billede mik28 Seniormester
25. august 2003 - 12:13 #23
w2k
Avatar billede _carsten Nybegynder
25. august 2003 - 12:19 #24
Har du prøvet at tilføje mysql driveren til din classpath ?

Affyret fra dosprompt:
SET CLASSPATH=.;c:\jdk1.4\jre\lib\ext\mm.mysql-2.0.4-bin.jar

"mm.mysql-2.0.4-bin.jar"    iøvrigt et mærkeligt navn - sikker på du har givet den det navn ??
Avatar billede mik28 Seniormester
25. august 2003 - 12:21 #25
det er det den hedder :-)
Avatar billede _carsten Nybegynder
25. august 2003 - 12:22 #26
Okay - men hjælper det at tilføje den i classpath ?
Avatar billede mik28 Seniormester
25. august 2003 - 12:26 #27
nej det hjalp ikke
Avatar billede mik28 Seniormester
25. august 2003 - 12:35 #28
CLASSPATH=c:\j2sdk1.4.0_01\jre\lib\ext\mm.mysql-2.0.4-bin.jar
Avatar billede _carsten Nybegynder
25. august 2003 - 12:37 #29
Du skal bruge  SET CLASSPATH=.;c:\j2sdk1.4.0_01\jre\lib\ext\mm.mysql-2.0.4-bin.jar

Ellers prøv fra dosprompt

Gå til directory hvorfra du kører classen Databaseforbindelsemysql

1. java -cp c:\jdk1.4\jre\lib\ext\mm.mysql-2.0.4-bin.jar CLASSEN_SOM_BRUGER_DB
Avatar billede _carsten Nybegynder
25. august 2003 - 12:39 #30
Og det skal selvfølgelig være:

java -cp c:\j2sdk1.4.0_01\jre\lib\ext\mm.mysql-2.0.4-bin.jar
Avatar billede mik28 Seniormester
25. august 2003 - 12:45 #31
jeg får bare en liste over hvad man kan
Avatar billede olly Nybegynder
25. august 2003 - 12:47 #32
java -cp c:\j2sdk1.4.0_01\jre\lib\ext\mm.mysql-2.0.4-bin.jar NAVNET_PÅ_CLASSFIL
Avatar billede mik28 Seniormester
25. august 2003 - 12:49 #33
exception i thread
Avatar billede _carsten Nybegynder
25. august 2003 - 12:49 #34
Nej - kan ikke være rigtigt!

Enten denne fra dosprompt og så kør din class fil som normalt
SET CLASSPATH=.;c:\j2sdk1.4.0_01\jre\lib\ext\mm.mysql-2.0.4-bin.jar
herefter: java WHATEVER

eller denne:
java -cp c:\jdk1.4\jre\lib\ext\mm.mysql-2.0.4-bin.jar CLASSEN_SOM_BRUGER_DB
Avatar billede mik28 Seniormester
25. august 2003 - 12:49 #35
noclassdeffounderror
Avatar billede mik28 Seniormester
25. august 2003 - 12:50 #36
har du en vnc client liggende
Avatar billede _carsten Nybegynder
25. august 2003 - 12:54 #37
Nej - har haft men smed den ud, skulle ikke bruge den alligevel

men, bruger du package navne i dine java-filer ??

For så er det jo package1.package2.NAVNET_PÅ_CLASSFIL
Avatar billede mik28 Seniormester
25. august 2003 - 12:58 #38
Avatar billede olly Nybegynder
25. august 2003 - 13:01 #39
Hvis det er en jsp eller servlet så skal du smide den i web-apps/lib
Avatar billede _carsten Nybegynder
25. august 2003 - 13:01 #40
Nu har jeg VNC!
Avatar billede mik28 Seniormester
25. august 2003 - 13:02 #41
www.web-oasen.dk

password mik28
Avatar billede _carsten Nybegynder
25. august 2003 - 13:21 #42
Prøv lige olly's forslag 25/08-2003 13:01:14
Avatar billede mik28 Seniormester
25. august 2003 - 13:32 #43
det kan jeg heller ikke få til at virke :-(
Avatar billede mik28 Seniormester
25. august 2003 - 13:33 #44
Det burde virke men det gør det bare ikke :-(
Avatar billede olly Nybegynder
25. august 2003 - 13:37 #45
Og du genstarter tomcat mår du ændre?

Der kan være problemmer der nemlig...
Avatar billede mik28 Seniormester
25. august 2003 - 13:42 #46
ja det gør jeg :-)
Avatar billede _carsten Nybegynder
25. august 2003 - 13:57 #47
Det sidste desperate jeg kan komme på, er fyre nedenstående to linier af
fra dosprompten, eller læg dem ind i autoexec.bat og genstart maskinen.

1.  SET PATH=%PATH%;c:\j2sdk1.4.0_01\BIN;
2.  SET CLASSPATH=.;c:\j2sdk1.4.0_01\LIB;c:\j2sdk1.4.0_01\jre\lib\ext\mm.mysql-2.0.4-bin.jar

Virker det ikke, er jeg totalt lost!
Jeg mener det er helt sikkrt at du ikke får fat i driveren.
Avatar billede _carsten Nybegynder
25. august 2003 - 14:07 #48
Der var jo også en anden mulighed, omdøb jar.filen til en zip-fil
(synes jeg er nemmere at arbejde med ) og så extracte den til c:\j2sdk1.4.0_01

Herefter bruger du: SET CLASSPATH=.;c:\j2sdk1.4.0_01\LIB;c:\j2sdk1.4.0_01\com

Det kan kun og skal virke !!
Avatar billede arne_v Ekspert
25. august 2003 - 15:53 #49
1)  Jeg vil fraråde at man anbringer JDBC driver jar filer i lib/ext. Når man
    opdaterer JDK (Java SDK) så mangler man lige pludeligt noget. Og
    man får problemer med at have forskellige versioner af samme driver.

2)  Jeg vil fraråde at man anbringer JDBC driver har filer i CLASSPATH. Med
    en lang classpath kan det være meget svært at gennemskue hvad der findes
    hvor. Og man får også her problemer med at have forskellige versioner
    af samme driver.
Avatar billede arne_v Ekspert
25. august 2003 - 15:53 #50
3)  Det hjælper ikke hverken at omdøbe eller udpakke en jar-fil.
Avatar billede arne_v Ekspert
25. august 2003 - 15:55 #51
For en almindelig applikation, så angiver man bare classpath til jar-filen
eksplicit i java kommandoen.

For en web applikation anbringes den i xxxx/WEB-INF/lib (hvis man bruger
DriverManager.getConnection direkte) eller i serverens lib directory (hvis man
bruger en connection pool eller man skal bruge container managed security).
Avatar billede arne_v Ekspert
25. august 2003 - 15:56 #52
Har I checket om klassen faktisk er i jar-filen ?
Avatar billede arne_v Ekspert
25. august 2003 - 15:56 #53
Og har jeg lov til at prøve via VNC ?
Avatar billede mik28 Seniormester
25. august 2003 - 16:12 #54
Hvis du er der og har tid så må du meget gerne prøve via VNC arne_v
Avatar billede arne_v Ekspert
25. august 2003 - 16:20 #55
Din JDBC driver er en gammel en.

I den gamle version hedder driveren:

org.gjt.mm.mysql.Driver

og ikke:

com.mysql.jdbc.Driver

som den gøre i nyere versioner !

Enten brug det gamle driver navn.

Eller opdater din driver.
Avatar billede arne_v Ekspert
25. august 2003 - 16:20 #56
Me dhensyn til placering af jar fil har jeg vist tydeligt forklaret
min *personlige* mening.
Avatar billede mik28 Seniormester
25. august 2003 - 16:22 #57
hvor finder jeg den nye driver
Avatar billede arne_v Ekspert
25. august 2003 - 16:24 #58
Avatar billede mik28 Seniormester
25. august 2003 - 16:27 #59
mysql-connector-java-3.0.8-stable.zip ikke
Avatar billede arne_v Ekspert
25. august 2003 - 16:29 #60
Jeps.
Avatar billede mik28 Seniormester
25. august 2003 - 16:30 #61
du må altså undskylde hvis jeg spørger dumt, men nu har jeg taget den her men jeg kan altså ikke se hvad jeg skal gøre med den
Avatar billede arne_v Ekspert
25. august 2003 - 16:35 #62
Så laver du et directory:

C:\mysqljdbc

[eller noget i den stil]

unzipper ZIP filen til det directory

og kopierer den nye jar-fil til hvor du nul vil have den !
Avatar billede mik28 Seniormester
25. august 2003 - 16:37 #63
det er da kun mysql-connector-java-3.0.8-stable-bin jeg skal bruge ikke
Avatar billede arne_v Ekspert
25. august 2003 - 16:40 #64
Ja.
Avatar billede mik28 Seniormester
25. august 2003 - 16:40 #65
yes så virker det. Tusinde tak for hjælpen :-)))))
Avatar billede _carsten Nybegynder
25. august 2003 - 19:15 #66
Er der nogen af jer som kan forklare mig følgende.

Hvordan kan omtalte jar-fil og totalt identisk java kode køre på linux
og ikke på windows, eller var det ikke den driver som blev anvendt på
linux, eller var der ændret i java koden ????

Jeg er nemlig pt. stået af på et område, jeg mente at jeg havde rimelig styr på.

Derfor spørgsmålet - det haster ikke en kommentar!
Avatar billede arne_v Ekspert
25. august 2003 - 19:18 #67
Det må logisk gælde at enten har koden på Linux brugt et andet
driver navn eller så har driveren på Linux været nyere.

Det sidste lyder sandsyneligt.

(den på Windows var ret gammel)
Avatar billede _carsten Nybegynder
25. august 2003 - 19:21 #68
Godt, d.v.s. vi er tilbage ved sædvanlige
ældgamle problem - det gælder om at bruge hovedet !

Takker.
Avatar billede arne_v Ekspert
25. august 2003 - 19:39 #69
Jeg opdagede det fordi jeg lavede en jar tvf på jar filen for at checke
om den var OK.
Avatar billede mik28 Seniormester
25. august 2003 - 21:47 #70
Det er altså lidt mystiskt. Nu har jeg checket en gang til og den eneste db-driver jeg kan finde på min linux maskine er mm.mysql-2.0.4-bin.jar og jeg henviser til den med com.mysql.jdbc.Driver. Der må være noget jeg overser for det kan jo ikke passe. Ohh well. Endnu engang tak for hjælpen begge to ;-)
Avatar billede _carsten Nybegynder
25. august 2003 - 21:53 #71
Tja, men der må jo ligge en mere ellers hænger det ikke sammen.

Men pyt, det virker jo nu.
Avatar billede arne_v Ekspert
25. august 2003 - 21:57 #72
Tja - som jeg skrev i mine 15:53-15:55 kommentarer så bør man accesse sine
jar filer på en sådan måde at man har helt styr på hvilke man bruger til
en given applikation.
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