Java: No suitable driver found for jdbc:h2

Ich habe ein Problem mit einigen von meinem code habe ich gesucht und alles versucht, was ich kenne, ohne Glück.


Szenario:

  • Anwendung überprüft, ob die JDBC-Treiber vorhanden ist, in diesem Fall der H2-Treiber (org.h2.Fahrer).
  • Wenn es nicht existiert, wird die Applikation lädt den JDBC-Treiber und fügt es zu einem ClassLoader in etwa so: (Hinweis: storageDataManager ist eine Klasse von mir, die ich verwenden für SQL-Methoden)

       File h2Driver = new File(directory.toString() + File.separator + "lib" + File.separator + "h2.jar");
       if (h2Driver.exists()) {
           URL[] url = new URL[0];
           try {
               url = new URL[]{h2Driver.toURI().toURL()};
               storageDataManager.setClassLoader(new URLClassLoader(url));
           } catch (MalformedURLException ignore) {}
        }

Wenn die storageDataManager läuft die erste Abfrage, versucht es, eine Verbindung mit dem angegebenen Treiber, und wenn es das tut haben ein ClassLoader verwendet es ClassLoader statt:

if (getClassLoader() != null) {
    getLogging().debug("Loading custom class loader for H2 driver: " + getClassLoader().toString());
    Driver driver = (Driver) Class.forName("org.h2.Driver", true, getClassLoader()).newInstance();
    getLogging().debug("Loaded H2 driver: " + driver.toString() + " - " + driver.getMinorVersion() + " - " + driver.getMajorVersion());
    DriverManager.registerDriver(driver);
} else {
    getLogging().debug("Loading H2 driver.");
    Class.forName("org.h2.Driver");
}
outputDrivers();
this.con = DriverManager.getConnection(this.url, this.username, this.password);
break;

Wenn ich die Anwendung ausführen bekomme ich diese Fehlermeldung:

"*No suitable driver found for jdbc:h2:plugins\Odin\data\OdinStorage;AUTO_RECONNECT=TRUE*"

Hier ist das komplette log:

[Debug] Loading custom class loader for H2 driver: java.net.URLClassLoader@3bf3d5f4
[Debug] Loaded H2 driver: org.h2.Driver@67257ce8 - 3 - 1
[Debug] Checking DriverManager drivers.
[Debug] Found driver #1: sun.jdbc.odbc.JdbcOdbcDriver
[Debug] Found driver #2: com.mysql.jdbc.Driver
[Debug] Found 2 drivers in DriverManager.
--------------------------- STACKTRACE ERROR ---------------------------
Class name: java.sql.DriverManager
Error message: No suitable driver found for jdbc:h2:plugins\Odin\data\OdinStorage;AUTO_RECONNECT=TRUE
Error cause: null
File name: null
Function name: getConnection
Error line: -1
--------------------------- STACKTRACE START ---------------------------
java.sql.DriverManager.getConnection(Unknown Source)
java.sql.DriverManager.getConnection(Unknown Source)
com.craftfire.commons.managers.DataManager.connect(DataManager.java:756)
com.craftfire.commons.managers.DataManager.executeQuery(DataManager.java:526)
com.craftfire.odin.managers.StorageManager.checkInventoryDatabase(StorageManager.java:65)
com.craftfire.odin.managers.StorageManager.checkDatabases(StorageManager.java:56)
com.craftfire.odin.managers.StorageManager.<init>(StorageManager.java:34)
com.craftfire.odin.managers.OdinManager.loadDatabases(OdinManager.java:206)
com.craftfire.odin.managers.OdinManager.init(OdinManager.java:75)
com.craftfire.odin.layer.bukkit.Odin.onEnable(Odin.java:63)
org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217)
org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:374)
org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:381)
org.bukkit.craftbukkit.CraftServer.loadPlugin(CraftServer.java:266)
org.bukkit.craftbukkit.CraftServer.enablePlugins(CraftServer.java:248)
org.bukkit.craftbukkit.CraftServer.<init>(CraftServer.java:200)
net.minecraft.server.ServerConfigurationManagerAbstract.<init>(ServerConfigurationManagerAbstract.java:50)
net.minecraft.server.ServerConfigurationManager.<init>(SourceFile:11)
net.minecraft.server.DedicatedServer.init(DedicatedServer.java:105)
net.minecraft.server.MinecraftServer.run(MinecraftServer.java:377)
net.minecraft.server.ThreadServerApplication.run(SourceFile:539)
---------------------------- STACKTRACE END ----------------------------

Meine Frage ist dann, warum nicht die Fahrer zeigen, bis in der DriverManager.getDrivers()?

Hinweis: ich nicht wollen, fügen Sie die Bibliothek zum CLASSPATH, das ist, warum ich brauchen, um zu finden eine Lösung für das Problem, das ich oben beschrieben.

Und wie kann ich dieses Problem lösen? Ich brauche einfach das laden der H2-JDB-Fahrer aus einem Glas.

Habe ich auch so probiert:

  • Nicht verwenden DriverManager.registerDriver(Treiber), aber Klasse.forName("org.h2.Treiber", true, getClassLoader()) statt, ich hab auch schon versucht mit .newInstance(), die weder arbeitete.

Könnte jemand mir eine Lösung?

Dank!

  • Ist die JAR-Datei für die H2 in den classpath?
  • Ich möchte nicht hinzufügen, um den Treiber zu meinem classpath, das ist, warum ich bin das herunterladen der jar statt und dann versuchen, es zu laden, das ist das, was ich brauchen eine Lösung für.
  • Warum wollen Sie nicht, um es in classpath?
  • Sie müssen fügen Sie die JAR-Datei dem classpath. Dies bedeutet NICHT notwendigerweise die änderung der globalen KLASSENPFAD-Umgebungsvariable. Es gibt mehrere andere Möglichkeiten, es zu tun.
InformationsquelleAutor Contex | 2012-10-16
Schreibe einen Kommentar