Запрос JDBC SQLite ATTACH при использовании C3P0

Недавно я внедрил C3P0 в своей программе тестирования баз данных (я использую его для тестирования разных запросов к нашим данным в разных форматах БД... sqlite, mariadb и т. Д.). Программа была изначально настроена с использованием единого постоянного соединения для выполнения всех запросов. Это работало нормально с SQLite, так как я должен был выполнить начальный ATTACH для другой таблицы. При переходе к C3P0, где необходимо открывать и закрывать соединение по каждому запросу, как можно выполнить команду ATTACH и применить ее к последующим запросам? В моем отказе я заметил, что первый запрос после присоединения, казалось, применился.

Мне действительно нужно чередовать ATTACH-тест как TESTDB для КАЖДОГО запроса???

Столкнувшись с аналогичной проблемой с setCatalog() для MariaDB. Я получаю "База данных не выбрана" для каждого последующего запроса после первого.

1 ответ

Решение

Мне действительно нужно чередовать ATTACH-тест как TESTDB для КАЖДОГО запроса???

Нет. Как @MarkRotteveel предложил в комментарии к вопросу, мы можем использовать настройщик соединений c3p0, чтобы настроить каждое соединение, когда оно получено для пула. Например, если мы создаем класс OurSQLiteConnectionCustomizer...

package com.example.sqlite_pooled;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import com.mchange.v2.c3p0.AbstractConnectionCustomizer;

public class OurSQLiteConnectionCustomizer extends AbstractConnectionCustomizer {

    public void onAcquire(Connection c, String pdsIdt) throws SQLException {
        try (Statement st = c.createStatement()) {
            st.execute("ATTACH DATABASE 'C:/__tmp/SQLite/test.sqlite' AS test");
        }
    }

}

... и мы говорим нашим ComboPooledDataSource использовать это...

cpds = new ComboPooledDataSource();
cpds.setConnectionCustomizerClassName("com.example.sqlite_pooled.OurSQLiteConnectionCustomizer");

... тогда, когда c3p0 получает новое соединение SQLite для пула, он автоматически выполняет ATTACH DATABASE для нас.

Другие вопросы по тегам