Как использовать драйвер JDBC от произвольного местоположения

Вы на правильном пути. Просто использование функции было неправильным. Я повторно использовал код и обновил его, чтобы он работал нормально. Для функции $ .each первое значение - это индекс ( docs ), который был основной причиной ошибки.

Я обновил код, и он отлично работает.

var arr = [
    ['a1','b1','c1','d1'],
    ['a1','e1','i1','j1'],
    ['a1','f1','k1','l1'],
    ['a1','g1','m1','n1'],
    ['a1','h1','o1','p1'],
    ['a2','b2','c2','d2'],
    ['a2','e2','i2','j2'],
    ['a2','f2','k2','l2'],
    ['a2','g2','m2','n2'],
    ['a2','h2','o2','p2']
];
obj = {}
$.each(arr,function(index)
{
    obj[arr[index][0]] = obj[arr[index][0]] || {}
    obj[arr[index][0]][arr[index][1]] = arr[index].slice(2);
});
console.log(obj)

Примечание: Решение является специфическим для вышеуказанного требования. Тем не менее, он может быть обобщен с помощью рекурсии.

Надеюсь, это поможет. Возврат для любых сомнений / разъяснений.

17
задан SaM 14 November 2008 в 00:07
поделиться

2 ответа

От Выбора статьи Ваш драйвер JDBC во времени выполнения ; я просто собираюсь отправить код здесь для ссылки.

идея состоит в том, чтобы обмануть менеджера по драйверу в размышление, что драйвер был загружен из системы classloader. Чтобы сделать это, мы используем этот класс:

public class DelegatingDriver implements Driver
{
    private final Driver driver;

    public DelegatingDriver(Driver driver)
    {
        if (driver == null)
        {
            throw new IllegalArgumentException("Driver must not be null.");
        }
        this.driver = driver;
    }

    public Connection connect(String url, Properties info) throws SQLException
    {
       return driver.connect(url, info);
    }

    public boolean acceptsURL(String url) throws SQLException
    {
       return driver.acceptsURL(url);
    }

    public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException
    {
        return driver.getPropertyInfo(url, info);
    }

    public int getMajorVersion()
    {
        return driver.getMajorVersion();
    }

    public int getMinorVersion()
    {
        return driver.getMinorVersion();
    }

    public boolean jdbcCompliant()
    { 
        return driver.jdbcCompliant();
    }
}

Этот путь драйвер, который Вы регистрируете, имеет тип DelegatingDriver, который загружается системой classloader. Теперь просто необходимо загрузить драйвер, Вы действительно хотите использовать использование безотносительно classloader, Вы хотите. Например:

URLClassLoader classLoader = new URLClassLoader(new URL[]{"path to my jdbc driver jar"}, this.getClass().getClassLoader());
Driver driver = (Driver) Class.forName("org.postgresql.Driver", true, classLoader).newInstance();
DriverManager.registerDriver(new DelegatingDriver(driver)); // register using the Delegating Driver

DriverManager.getDriver("jdbc:postgresql://host/db"); // checks that the driver is found
18
ответ дан 30 November 2019 в 13:28
поделиться

Проблема DriverManager, выполняет "задачи с помощью экземпляра загрузчика класса непосредственной вызывающей стороны". См. Инструкцию 6-3 Безопасные Инструкции по Кодированию для Языка программирования Java, версии 2.0 . Системный загрузчик класса никоим образом не является особенным в этом случае.

Только для ударов, я записал запись в блоге на этом предмете некоторое время назад. Мое решение, хотя более сложный затем решение Nick Sayer, является больше завершенным и даже работает из недоверяемого кода. Также примечание URLClassLoader.newInstance предпочтено более чем new URLClassLoader.

5
ответ дан 30 November 2019 в 13:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: