2012-03-31 4 views
1

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

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

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

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

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

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); 

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

любых идеи?

+0

Эта [ссылка] [1] может быть полезна. [1]: http://code-know-how.blogspot.ru/2011/10/how-to-enable-foreign-keys-in-sqlite3.html – Marco167

ответ

1

К сожалению, это больше вопрос о 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); 

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

+0

Я пробовал. Отлично работает. Я использую этот диспетчер пула соединений в дополнение к этой библиотеке sql: http://www.source-code.biz/miniconnectionpoolmanager/. Для меня эта тема решена. – stewenson

Смежные вопросы