Настройка SQLite JDBC PRAGMA - PullRequest
       13

Настройка SQLite JDBC PRAGMA

1 голос
/ 31 марта 2012

Я пытаюсь установить PRAGMA foreign_key = ON;в базе данных sqlite.Я кодирую некоторое программное обеспечение на Java, используя драйвер jdbc для sqlite, этот: http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC.

Я также использую пул соединений для ускорения запросов к БД.Я использую эту библиотеку: http://commons.apache.org/dbcp/.

До этого момента все хорошо.Теперь мне нужно установить настройку PRAGMA, конкретно PRAGMA foreign_key = ON;перед созданием таблиц, потому что мне нужно убедиться в согласованности между некоторыми столбцами в БД.

Когда я создаю БД, для нее автоматически устанавливается значение ВЫКЛ.Поэтому я должен включить его, чтобы использовать его.

Но я не знаю, как это сделать, то, как я готовлю объединяемый источник данных, выглядит так:

    public static DataSource getDataSource(String connectURI) {
GenericObjectPool connectionPool = new GenericObjectPool(null);
ConnectionFactory connectionFactory =
    new DriverManagerConnectionFactory(connectURI, null);
PoolableConnectionFactory poolableConnectionFactory =
    new PoolableConnectionFactory(connectionFactory, connectionPool, null, null, false, true);
DataSource dataSource = new PoolingDataSource(connectionPool);
return dataSource;
}

Но я не знаю, как правильно установить эту прагму, яобнаружил, что это возможно:

SQLiteConfig config = new SQLiteConfig();
config.enforceForeignKeys(true);

Но я не знаю, как использовать его в связи с этими сложными настройками пула ...

Есть идеи?

1 Ответ

1 голос
/ 01 апреля 2012

К сожалению, это больше вопрос DBCP, чем SQLite. Я согласен, где-то в DBCP должно быть место для установки / обновления конфигурации для данного источника данных. Я ожидаю увидеть его в классе PoolingDataSource, но, конечно, его там нет.

Один из возможных вариантов - использовать библиотеку пулов jdbc, которая использует интерфейс ConnectionPoolDataSource. Если это так, вы можете использовать SQLiteConnectionPoolDataSource , чтобы настроить пул соединений следующим образом:

  //Set config
    org.sqlite.SQLiteConfig config = new org.sqlite.SQLiteConfig();
    config.enforceForeignKeys(true);


  //Create JDBC Datasource
    SQLiteConnectionPoolDataSource dataSource = new SQLiteConnectionPoolDataSource();
    dataSource.setUrl("jdbc:sqlite:" + db.toString().replace("\\", "/"));
    dataSource.setConfig(config);

Обратите внимание, что существует расширение для DBCP, которое называется DriverAdapterCPDS . Это реализация интерфейса ConnectionPoolDataSource, поэтому теоретически вы должны иметь возможность использовать SQLiteConnectionPoolDataSource с DBCP.

...