[java] dynamiczne ladowanie oracla

0

Witam,

muszę dynamicznie załadować sterownik do bazy Oracle'a. Mój kod:

        Object newInstance = null;
        File file = new File("ojdbc14.jar");
        if(file.exists()) {
            URL url = file.toURL();
            URL[] urls = new URL[1];
            urls[0] = new URL(url.toString());
            URLClassLoader loader = new URLClassLoader(urls);
            Class driverClass = loader.loadClass("oracle.jdbc.OracleDriver");
            newInstance = driverClass.newInstance();
        } else
            throw new Exception("Nie znaleziono sterownika bazy danych!");

Niestety program wywala się w momencie kiedy tworzony jest obiekt driverClass. Nie może znaleźć takiej klasy. Ten kod działa dla pakietów tworzonych przeze mnie!!!

0

Oracle is baaaad, mkay, don't use Oracle, mkay, don't be baaaad, mkay....

Masz ten plik ojdbc14.jar w classpath zeby JVM go widziala?

0
::. napisał(a)

Oracle is baaaad, mkay, don't use Oracle, mkay, don't be baaaad, mkay....

Masz ten plik ojdbc14.jar w classpath zeby JVM go widziala?

No niestety Oracle musi być.
Mam go na 100% w odpowiedniej lokalizacji. Podawana przeze mnie klasa też jest.
A może jest jakaś inna metoda na dynamiczne załadowanie sterownika? W Javie mało piszę.

0

To ja się teraz popiszę umiejętnością czytania dokumentacji metoda loadClass()

  1. Invoke findLoadedClass(String) to check if the class has already been loaded.
    2. Invoke the loadClass method on the parent class loader. If the parent is null the class loader built-in to the virtual machine is used, instead.
    3. Invoke the findClass(String) method to find the class.
0

No i co to oznacza?

0

@::., że zanim załadujesz klasę JVM sprawdzi czy w ogóle taka klasa istnieje. I w razie czego wywali się wcześniej.

0

Wow.
No przeciez autor mowi ze nie dziala bo nie moze znalezc klasy, wiec o co chodzi?

0

Hm... liczę na podanie przyczyny dlaczego klasa nie została załadowana.

0

Taki kod (nieco zmieniony, ale praktycznie bez roznicy, zmienilem tylko sposob tworzenia URL i tablicy URL[], i sciezki) u mnie dziala bez problemu:

package test;


import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.sql.Driver;


public class Test {

    public static void main(String[] args) throws Exception {
        Driver newInstance = null;
        File file = new File("/home/incognito/Desktop/ojdbc14.jar");
        if (file.exists()) {
            URL[] urls = { file.toURI().toURL() };
            URLClassLoader loader = new URLClassLoader(urls);
            Class<?> driverClass = loader.loadClass("oracle.jdbc.OracleDriver");
            newInstance = (Driver) driverClass.newInstance();
        } else {
            throw new Exception("Nie znaleziono jara ze sterownikiem bazy danych!");
        }
        System.out.println(newInstance.getClass().getName());
    }
}

wiec przestan wymyslac teorie.
Obstawiam ze jest podana zla sciezka do jara.

Inna sprawa co autor chce z tym driverem zrobic.

0

Wielkie dzięki za odpowiedzi,
Sprawdzę ten kodzik. Już zacząłem robić to inaczej, ale to nie to o co mi chodziło. Po co to mi?

Załóżmy, że robię aplikację Webową, która ma pewną funkcjonalność, np. forum internetowe. Ma ona być oparta na różnych bazach danych. Na jakiej bazie będzie oparta decyduje użytkownik w czasie budowy strony (będzie jakaś strona z kreatorem).

Użytkownik zostaje poproszony o załadowanie biblioteki jar napisanej przeze mnie, która nazywam konektorem. Np. forum.oracle.jar lub forum.sqlserver.jar. Gdy biblioteka zostanie załadowana wywoływana jest pewna metoda z tej biblioteki, która zwraca jaki sterownik bazy danych musi być załadowany i proszony jest o załadowanie takiego sterownika. No i tu jest problem bo jak już go załaduje to nie mogę załadować klas dynamicznie.

W ogóle próbowałem zrobić to tak, że będzie ładowany tylko konektor a sterownik zostanie jakoś zlinkowany, ale chyba się nie da...

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