Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Java] JDBC Connector - No suitable driver

rados69 23 Sep 2008 19:26 5357 4
  • #1
    rados69
    Level 10  
    Witam

    Po 2 dniach walki z wiatrakami postanowilem zwrocic sie o pomoc do kogos doswiadczonego, gdyz moja cierpliwosc sie wyczerpala. Przeszukalem internet, przeczytalem ksiazke i wszystkie rozwiazania jakie znalazlem zdaly sie na nic.

    Napisalem prosty programik majacy na celu sprawdzenie placzenia z baza danych na zdalnym serwerze. Po skompilowaniu programu wyrzucana sa 2 nastepujace wyjatki:

    com.mysql.jdbc.Driver
    No suitable driver

    I teraz wyjasniam:
    - Moja wersja JDK to jdk1.5.0_12
    - baza danych z ktora chce sie polaczyc do MySQL
    - sterownik JDBC ktory posiadam to mysql-connector-java-5.1.6-bin.jar
    - zmiennie srodowiskowe - KAZDE info jakie znalazlem na inecie i w ksiazkach mowi aby sciezke dostepu wpisac do zmiennej CLASSPATH. W moim winie (XP pro) NIE MA zmiennej CP, jest zmienna Path i to tam posiadam obie sciezki dostepu:

    C:\Program Files\Java\jdk1.5.0_12\bin
    C:\Program Files\Java\jre1.5.0_12\lib\ext\mysql-connector-java-5.1.6-bin.jar

    Wpisujac w CMD "java -version" dostaje poprawna odp, natomiast wpisujac "java c:\nazwa.java" dostaje info java.lang.NoClassDefFoundError main.

    I teraz tak: sterownik ktory posiadam na 99% jest ok, jak wpisze sciezki dostepu do ClassPath a nie Path to -version nie wyswietla mi dobrej wersji, wiec jestem rowniez prawie pewien ze zmienna Path jest dobrze opisana. WSZYSTKO wg tutoriali na necie i w ksiazce mam zrobione, a blad wystepuje (W NetBeans programy kompiluja sie, tylko w lini CMD nie).

    Prosze o jakas pomoc albo rade bo po 2 dniach mam juz dosc ;)

    Moj program:

    Quote:

    /**
    *
    * @author rados
    */


    import java.sql.*;
    import java.io.*;
    import java.util.*;


    public class MyConn {

    public static void main(String args[]) throws SQLException
    {

    init();
    Statement stat = polaczenie.createStatement();
    String command = "INSERT INTO `test` (`id`) VALUES ('1');";
    stat.executeUpdate(command);


    }

    public static void init() {
    try {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    //pierwszy exception
    } catch (Exception e) {
    mess = "" + e.getMessage();
    System.out.println(mess);
    }


    try {
    polaczenie = DriverManager.getConnection(data, user, pssd);
    // drugi exception
    mess = "nawiazal polaczenie";
    System.out.println(mess);
    } catch (SQLException e) {
    mess = "" + e.getMessage();
    System.out.println(mess);
    }


    }

    static String mess;
    static String data = "jdbc:mysql://adres_bazy/nazwa_bazy";
    static String user = "user";
    static String pssd = "pass";
    static Connection polaczenie;
    }
  • #2
    Anonymous
    Anonymous  
  • #3
    rados69
    Level 10  
    albertb wrote:


    Niestety nie wszystko w/g tutoriali.
    1 Skoro piszą o CLASSPATH to tak ma być, a nie po Twojemu.
    PATH to ścieżki do programów systemu operacyjnego
    CLASSPATH to ścieżki do programów java (Twoich, bibliotek).
    2. Skoro nie ma takiej zmiennej to ją stwórz.
    3. Programy najpierw kompiluje się poleceniem javac, potem uruchamia interpreterem java, a nie od razu java nazwa.java

    Jak dobrze poszukasz, to na java.sun.com na pewno znajdziesz wszystko co Ci potrzebne.

    Powodzenia Albert


    Tak tez pomyslalem, nie posiadam zmiennej CLASSPATH, wiec ja stworze. Po dokonaniu ww. czynnosci jedynym efektem jest to, ze po sprawdzeniu wersji okazalo sie ze niestety, ale uruchomina jest nie ta wersja co potrzeba.
    Zapomnialem nadmienic ze posiadam na komputerze dwie wersje Javy:
    1.6 - samo JRE
    1.5 - JRE + JDK (ten ktory potrzebuje)
    Czyli reasumujac: po wpisaniu sciezki dostepu w Path wersja aktualna to 1.5 (dobra), po wpisaniu w CLASSPATH jest wersja 1.6 (czyli dokladnie taka sama jak nie wpisujac nigdzie ani slowa). Gdzie jest haczyk?

    Apropos tematu glownego czyli sterownika JDBC znalazlem info, ze srodowisko ktorego uzywam (NetBeans 6.1) nie korzysta ze zmiennych srodowiskowych windy, gdyz posiada wlasne sciezki dostepu do bibliotek i sterownikow (w tym rowniez do JDBC).
    Jezeli ktos rowniez spotkal sie z tym problemem prosze o porade...
  • #4
    Anonymous
    Anonymous  
  • #5
    bebop
    Level 11  
    1) biblioteki javy w tym wypadku connector dodajesz do zmiennej CLASSPATH np. moze wygladac tak .;C:\Program Files\PostgreSQL\8.1\jdbc\postgresql-8.1-405.jdbc3.jar;
    i do zadnej innej
    2) tak jak juz pisal albertb w zmiennej PATH podajesz sciezki do programow windowsowych ktore chcesz uruchamiac z linii polecen bez wpisywania pelnej sciezki dostepu np C:\maven-2.0.4\bin lub C:\Program Files\Java\jdk1.5.0_12\bin dlatego mozesz np uruchomic polecenie java i javac w kazdym katalogu.
    3) Dla pewnosci mozesz utworzyc jeszcze jedna zmienna srodowiskowa o nazwie JAVA_HOME w ktorej podasz sciezke dostepu do javy jaka chcesz uzywac np. C:\Program Files\Java\jdk1.5.0_12
    4) Jezeli robiles update javy to domyslnie w katalogu gdzie masz zainstalowany system np. C:\WINDOWS\system32 utworzone zostaly pliki java.exe, javaw.exe, javaws.exe i windows domyslenie je uruchamia dlatego zeby korzystac z javy 1.5 musisz je z tamtad usunac i wtedy sprawdzic wersje poloceniem java -version
    5) Jezeli otrzymujesz wyjatek No suitable driver byc moze wersja sterownika nie zgadza sie z wersja serwera DB i sprobuj sciagnac inny