Was ist der Klassenpfad für das Groovy Console / jdbc-Treiberprogramm?

Dieser Datenbankcode ist in der Java-Umgebung in Ordnung (ohne den gebundenen Wert 'c'), aber in der Groovy-Konsole kann jdbc mit Ausnahme von @ nicht ordnungsgemäß verwendet werde

java.sql.SQLException: No suitable driver found for jdbc:sqlserver://localhost;databaseName=

Driver-Klasse ist für Skripte bekannt (wird ohne Null usw. geladen), ist aber wahrscheinlich nicht im Drivermanager registriert?

code (ich versuche es mit und ohneClass.forname() )

import groovy.sql.Sql
import groovy.sql.DataSet

c =   Class.forName('com.microsoft.sqlserver.jdbc.SQLServerDriver')

def db = [url:'jdbc:sqlserver://localhost;databaseName=... ,driver:'com.microsoft.sqlserver.jdbc.SQLServerDriver']
 def sql = Sql.newInstance(db )

EDIT: was ich schon gecheckt hatte:

fresh started Groovy-Konsole hat nicht sqljdbc4.jar im Klassenpfad.

Natürliche Ausnahmejava.lang.ClassNotFoundException in Zeile 4Class.forName(), oder wenn Zeile 4 kommentiert ist und die Parameter db mit dem Treibernamen die Ausnahme in Zeile 7 darstellenSql.newInstance(db )

Ist logisch, Treiberklasse nicht gefunden etc ...

1a. Wenn DB-Parameter mit 3 Argumenten (ohne Treiber), gehe ich davon aus, dass die zulässige (und in anderen Situationen funktionierende) Ausnahme sich in @ änderSQLException: No suitable driver in Zeile 7Sql.newInstance(db )

Es ist auch logisch, DriverManager weiß nicht, wie man den Schlüssel auflöstjdbc:sqlserver. Der Treiber ist nicht registriert und DriverManager hat keine magischen Kenntnisse darüber, welche Klasse implementiert.

2. Wenn ich jar zum Klassenpfad der Konsole hinzufüge (Skript / jar (s) zum Klassenpfad hinzufügen), werden die Dinge etwas geändert. Nicht mehrClassNotFoundException und Variablec hat einen Wert ungleich Null (Treiberklasse), aberSQLException: No suitable driver geht weiter

Mein Verständnis der JDBC-Philosophie: (moderner) JAR-Treiber verwendet Technik mit fileMETA-INF/services/java.sql.Driver bekannt sein fürDriverManager. In der richtigen Situation ist das vierte Argument (Name der Fahrerklasse) nicht erforderlich, da es automatisch erkannt wird. Bitte korrigieren Sie mein Verständnis, wenn ich falsch liege.

Ich habe das Wort 'active' in diesem Sinne verwendet ("non active" bedeutet, dass eine Klasse existiert und geladen ist, aber als jdbc-Treiber verwendet werden kann).

ein maximaler Code ist:

import groovy.sql.Sql
import groovy.sql.DataSet
import java.sql.DriverManager;
import java.util.ServiceLoader;


c =   Class.forName('com.microsoft.sqlserver.jdbc.SQLServerDriver')
DriverManager.getDrivers()
ServiceLoader.load(java.sql.Driver.class)
def db = [url:'jdbc:sqlserver://localhost;...,driver:'com.microsoft.sqlserver.jdbc.SQLServerDriver']
def sql = Sql.newInstance(db )

aber dennochno suitable driver Ausnahme

EDIT2: Ich zähle Dinge mit einem solchen Code auf (vor newInstance ()):

StringBuilder sb = new StringBuilder();
        String grVersion = "brak";

        Enumeration<Driver> dri = DriverManager.getDrivers();

        for (Enumeration<Driver> e = dri; e.hasMoreElements();) {
            Driver e1 = e.nextElement();
            sb.append(e1.getClass().getName()).append(' ');
            sb.append(e1.getMajorVersion()).append('.').append(e1.getMinorVersion());
        }


        // get LOADED drivers niesetty

        ServiceLoader<java.sql.Driver> codecSetLoader = ServiceLoader.load(java.sql.Driver.class);
        for (Driver e1 : codecSetLoader) {
            sb.append(e1.getClass().getName()).append('!');
            sb.append(e1.getMajorVersion()).append('.').append(e1.getMinorVersion());
            sb.append("# ");
        }

und bekomm

com.mysql.jdbc.Driver 5.1com.mysql.fabric.jdbc.FabricMySQLDriver 5.1com.mysql.jdbc.Driver!5.1# com.mysql.fabric.jdbc.FabricMySQLDriver!5.1# com.microsoft.sqlserver.jdbc.SQLServerDriver!4.0#  
Exception thrown

java.sql.SQLException: No suitable driver found for jdbc:sqlserver://localhost;databaseName=....

    at ConsoleScript11.run(ConsoleScript11:32)

Mein (grundlegender) Code, der ausgeführt wird, funktioniert in der Tomcat-Umgebung noch einwandfrei. Was ist los

Antworten auf die Frage(4)

Ihre Antwort auf die Frage