Что такое classpath для драйвера Groovy Console / jdbc?

Такой код базы данных работает нормально в среде Java (без связанного значения 'c'), но в консоли Groovy не может правильно использовать jdbc, за исключением

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

Класс драйвера известен для скрипта (загружается без нуля и т. Д.), Но, вероятно, не зарегистрирован в Drivermanager?

код (я пытаюсь с и безClass.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 )

РЕДАКТИРОВАТЬ: что я уже проверил:

только что запущенная консоль Groovy не имеет sqljdbc4.jar на пути к классам.

Естественное исключениеjava.lang.ClassNotFoundException на линии 4Class.forName()или если строка 4 прокомментирована, а параметры db с именем драйвера - исключение в строке 7Sql.newInstance(db )

Это логично, класс драйвера не найден и т.д.

1a. если параметры db с 3 аргументами (без драйвера), я предполагаю, что его юридическое (и работающее в других ситуациях) исключение изменится наSQLException: No suitable driver на линии 7Sql.newInstance(db )

Это тоже логично, DriverManager не знает, как решить ключjdbc:sqlserver , Драйвер не зарегистрирован, и DriverManager не знает, что реализует класс.

2. когда я добавляю jar в консольный путь к классам (Script / Add jar (s) к classpath) вещи несколько меняются. Больше не надоClassNotFoundException и переменнаяc имеет ненулевое значение (класс драйвера), ноSQLException: No suitable driver продолжается.

Мое понимание философии JDBC: (современный) драйвер JAR использует технику с файломMETA-INF/services/java.sql.Driver быть известнымDriverManager, Таким образом, в правильной ситуации 4-й аргумент (имя класса драйвера) не требуется, поскольку обнаруживается автоматически. Пожалуйста, исправьте мое понимание, если я ошибаюсь.

В этом смысле я использовал слово «активный» («неактивный» означает, что класс существует и загружен, но может использоваться как драйвер jdbc).

Мой максимальный код:

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 )

но до сих порno suitable driver исключение

EDIT2: я перечисляю вещи с таким кодом (до 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("# ");
        }

и получить

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)

Мой (базовый) код выполняется в среде Tomcat, все еще работает нормально. В чем дело?

Ответы на вопрос(2)

Ваш ответ на вопрос