java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

0

mam mały problem połączeniem się do bazy z linii poleceń w kompilatorze pokazuje że jest oki i z bazy pobiera poprawnie rekord ale jak uruchomię z linii poleceń "java tmysql" to występuje błąd

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknownn 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 tmysql.obj(tmysql.java:16)
at tmysql.main(tmysql.java:9)

zmienne srodowiskowe ustawione mam takie czy sa poprawnie ustawione?:

CLASSPATH = C:#_soft\Java\jre1.6.0_04\lib
PATH = ......... ;c:#_soft\Java\jdk1.6.0_04\bin

import java.sql.*;

public class tmysql {
   public static String db="baza"; //baza
   public static String tab="tabelka"; //tabela w bazie
   static String url ="jdbc:mysql://localhost:3306/";
   
public static void main(String [] args) {
   System.out.println("test MySQL");
   System.out.println("stan = "+obj());   
}

public static int obj(){
  int kasa=0;
    try { Class.forName("com.mysql.jdbc.Driver").newInstance();
              Connection con = DriverManager.getConnection(url+db,"root", "haslo");
              String query = "SELECT money FROM `baza`.`tabelka`  where id='"+1+"';";
              PreparedStatement ps = con.prepareStatement(query);
              ResultSet rs = ps.executeQuery();
    while (rs.next()) {
       kasa += rs.getInt("money");
    }
    rs.close();ps.close();
    }catch( Exception e ) { e.printStackTrace(); }
  return kasa;
}

}
0

w Classpath brakuje ścieżki do jara ze sterownikiem mysql.

$ java -cp=mysql.jar tmysql

Czy jakoś tak ;)

0

To co mowi Koziolek, i dodatkowo: nie, Twoja zmienna classpath nie jest poprawnie ustationa. Jesl ustawiasz tam jakis katalog, to nie znaczy ze jary z tego katalogu sa w classpath, to oznacza tylko ze klasy ktore sa niespakowane w jary i sie znajduja w tym katalogu naleza do classpath. W javie 6 mozesz uzyc .../lib/* (chodzi o ten *) aby wskazac wszystkie jary w folderze, jednak wtedy nie panujesz nad kolejnoscia jarow (co zazwyczaj nie powinno byc problemem, a jesli jest, to problem lezy gdzies indziej tak czy tak).

0

Zapewne macie racje, ale sprawdziłem u siebie. Zmienna CLASSPATH nie istnieje, JRE korzysta z wszystkich jarów, które są w katalogu LIB i podkatalogu LIB\EXT.

0

@up: co to znaczy nie instnieje? Sobie zrob zdefiniuj i zaistnieje. To wlasnie zrobil autor z tego co udalo mi sie zorientowc?

0

Nie istnieje i jak wynika z zachowania JRE nie jest potrzebna. Jary ze wspomnianych katalogów są przeszukiwane podczas szukania klas.

0

Cos wiesz ale nie do konca, musisz jeszcze poczytac. Domyslnie tylko klasy wchodzace w sklad JDK (z katalogu lib) oraz extensions (domyslnie lib/ext, ale mozna dodawac swoje wlasne lokalizacje) sa ladowane, przy czym z katalogu lib wczytywane sa tylko standardowe jary (jak tools.jar), nie mozna tam wrzucic swojego i miec go zaladowanego. Autor to zrobil i nie dziala - musi wrzucic jara do ext. Jednakze, poczytajcie sobie obaj dlaczego instalowanie jarow w ext jest ogolnie niezalecane. Jak zreszta i posiadanie zmiennej CLASSPATH, ktora autor zle ustawil.
Najlepiej jest nosic takie jary z aplikacja i odpowiednio ustawiac Class-Path w manifescie lub w linii polecen za pomoca skrypciku.

0

@up, chyba nie muszę doczytać, niczego nowego się nie dowiedziałem ;-) . Może się nieprecyzyjnie wyraziłem w sprawie katalogów LIB i LIB\EXT, wszystkie rozszerzenia mam w katalogu LIB\EXT i wiem, że tam mają być. Programy, które napisałem i które są uruchamiane na innych maszynach nie wymagają umieszczania czegokolwiek w LIB\EXT.
P.S. Skąd wziąłeś informację, że autor postu umieścił jara ze sterownikiem w katalogu LIB?

0
bo napisał(a)

JRE korzysta z wszystkich jarów, które są w katalogu LIB i podkatalogu LIB\EXT

Tutaj napisales zle, dlatego sie czepialem. Nadal twierdze ze to jest zle stwierdzenie - nie wszystkie jary z lib sa uzywane.

bo napisał(a)

wszystkie rozszerzenia mam w katalogu LIB\EXT i wiem, że tam mają być. Programy, które napisałem i które są uruchamiane na innych maszynach nie wymagają umieszczania czegokolwiek w LIB\EXT

Ale jak, nie do konca rozumiem: u siebie umieszczasz jary w lib/ext, programy z nich korzystaja, przenosisz na inne maszyny i tam tez dzialaja bez instalacji w ext?

bo napisał(a)

P.S. Skąd wziąłeś informację, że autor postu umieścił jara ze sterownikiem w katalogu LIB?

W sumie nie wiem skad to wzialem, zalozylem chyba skoro zrobil sobie zmienna CLASSPATH ;d ale masz racje, nigdzie nie ma takiej informacji.

W sumie nie ma co ciagnac watku, i tak piszemy nie na temat, nie dogadujemy sie, a autor dal za malo informacji, jak wlasnie dzielnie wykazales ;d

1

Miałem ten sam problem cały dzień się z tym motałem. Jeżeli chcesz nawiązać połączenie z bazą danych MySql najpierw musisz ściągnąć sterownik bibliotekę JConnector http://dev.mysql.com/downloads/connector/j/ następnie w swoim kompilatorze odnaleźć właściwość Project Properties i tam z kolei dodać ściągniętą biblioteczkę jako zewnętrzną w Libraries / classpath i wtedy wszystko hula.... Powodzenia

0
Obstruktor napisał(a)

Miałem ten sam problem cały dzień się z tym motałem. Jeżeli chcesz nawiązać połączenie z bazą danych MySql najpierw musisz ściągnąć sterownik bibliotekę JConnector http://dev.mysql.com/downloads/connector/j/ następnie w swoim kompilatorze odnaleźć właściwość Project Properties i tam z kolei dodać ściągniętą biblioteczkę jako zewnętrzną w Libraries / classpath i wtedy wszystko hula.... Powodzenia

Za to ja męczyłem się 2 dni(tzn.2 wieczory) i znalazłem Twojego posta... Wielkie dzięki!!!!

1 użytkowników online, w tym zalogowanych: 0, gości: 1