Problem z JDBC - progam javy nie wykrywa mi klasy "com.mysql.jdbc.Driver"

0

Próbuję działać poćwiczyć na JDBC i mam problemy z zainstalowaniem tego pakietu dla MySQL. Robię wszystko według instrukcji z z MySQL. Dodałem zmienną środowiskową do Windows XP CLASSPATH wskazująca gdzie znajduję się katalog z plikiem jar "mysql-connector-java-5.1.18-bin.jar". Co ciekawe wcześniej w moim systemie teko CLASSPATH'a nie było ale Eclipse nie miało problemu ze znajdowaniem bibliotek klas. Wcześniej miałem tylko zmienne środowiskowe JAVA_HOME (wskazuje katalog jdk) i PATH (wskazuje katalog bin). No więc dodałem CLASSPATH'a z katalogiem do sterownika JDBC i wpisuję ładowanie klasy:
Class.forName("com.mysql.jdbc.Driver"); ale przy wykonaniu programu dostaję błąd:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
Próbowałem też ładowania przez:
System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");
i też nie działa. Wypada błąd nieznalezienia drivera:
java.sql.SQLException: No suitable driver found for jdbc//localhost:3306/sakila?profileSQL=true
Boże nic mnie tak nie wku.. jak zmienne środowiskowe ....
Czy ktoś wie co może być grane?

Robię wszystko według dokumentacji:
http://dev.mysql.com/doc/refman/4.1/en/connector-j-installing-classpath.html
http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html

Może problem Windowsa XP nie wczytującego wszystkich zmiennych środowiskowych?

Z góry dzięki

0

Jeśli uruchamiasz spod eclipse to dodaj tą bibliotekę do build-patha dla projektu (prawy klik -> build path -> add jar)
Jeśli uruchamiasz ręcznie to musisz podać parametr -cp katalog_z_bilioteką

0

Działa! To był to - dodanie jara w Eclipse. Dzięki, zaoszczędziłeś mi kupę czasu bo już nie wiedziałem gdzie szukać błędu.
Ale wynika z tego że ja czegoś nie rozumiem odnośnie zmiennych środowiskowych. Wydawało mi si że jak w Windowsie dopisze mu do CLASSPATH'a ścieżkę do tego jara (do jego katalogu) to będzie on z automatu zaciągany przy wirtualną maszynę przy każdym jej uruchomieniu i budowaniu biblioteki klas standardowych. Po to jest chyba zmienna środowiskowa? A tu jednak dla Eclipse nie pociągnął. Masz jakąś wiedzę na ten temat?

0

To że stworzyłeś sobie jakąś zmienną środowiskową o niczym nie świadczy ;]
Możesz sobie co najwyżej w Build path dodać referencje do bibliotek korzystając z tej zmiennej środowiskowej zamiast z ścieżki bezpośredniej (często się tak robi ze zmienną określającą repozytorium Mavena M2_REPO). Jak chcesz sobie ułatwić życie to zainteresuj się Mavenem. Możesz zainstalować wtyczkę m2e do Eclipse. Wtedy dołączanie zależności do projektu staje sie znacznie łatwiejsze, bo nie musisz się martwić szukaniem jarów w internecie ;)

0

A czy dodanie pliku jar z driverami JDBC (lub innej grupy klas niestandardowych) do katalogu bibliotek javy czyli chamskie zgranie do C:\Program Files\Java\jre6\lib nie powinno rozwiązać problemu dostępności tej biblioteki?
Bo chodzi mi o to że dodanie jej do Eclipse powoduje jej dostępność tylko w Eclipse. Jeżeli będę odpalał plik class przez wiersz poleceń to będę musiał dodawać za każdym razem Classpatha, co jest kłopotliwe. W tym przypadku nawet wykonywalny jar (runnable jar) traci swoją użyteczność jeżeli nie zawrze w sobie tej dodatkowej biblioteki.
Rozumiem że:
jeżeli napiszę program który ma wykorzystywać klasy z JDBC ale w projekcie (Eclipse) na koniec odepnę bibliotekę JDBC (ten jar) tuż przed tworzeniem z mojego programu wykonywalnego jar bo np. nie chcę aby on zbyt dużo ważył (ta biblioteka to 777 kb) to w tym momencie ten jar nie wykona mi się, nawet gdy mam wpisanego classpatha w zmiennych środowiskowych?
Czyli niestandardowe biblioteki zawsze muszą być zawierane wewnątrz moich wykonywalnych jar aby te programy (jar) mogły działać? Dobrze rozumiem?
No chyba że jest jeszcze jakiś inny sposób.

0

Ogólnie odpowiedź brzmi: tak.
Rozwiązania są dwa:

  • wrzucanie wszystkich bibliotek do jara -> co za różnica że ten jar będzie dużo ważył skoro do działania aplikacji i tak musisz te wszystkie jary dostarczyć, więc efektywnie cała aplikacja będzie zajmować tyle samo miejsca...
  • zrobienie osobnego katalogu lib w miejscu instalacji aplikacji i uruchamianie aplikacji z podaniem ścieżki do tego katalogu w classpathie (nie trzeba tego robić z palca, bo przecież możesz napisać skrypt uruchamiający aplikację)
0

Dzięki za to info.
Z tym drugim rozwiązaniem - skryptem, to już testowałem pod windowsowskim cmd i jest to niestety kiepskie rozwiązanie. Mogę zrobić taki pliczek (.cmd lub .bat) ale wszystkie ścieżki w nim (zarówno do odpalanego pliku class jak i ścieżka classpath) są lokowane względem ścieżek bezwzględnych wpisanych w tych .cmd, lub .bat. Jak po napisaniu go przeniosę go do innego katalogu to już koniec z działaniem uruchomienia. Nawet ja bedę go przenosił miezy katalogami razem z plikiem klasy głównej i bibliotekami. Brak możliwości określania ścieżek względnych dla cmd wszystko psuje.
Dzięki za wyjaśnienia. : )

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