2012-03-31 54 views
1

PRAGMA foreign_key = ONに設定しようとしています。 sqliteデータベースで。私はjavaのいくつかのソフトウェアをsqlite用のjdbcドライバを使ってコーディングします。これはhttp://www.xerial.org/trac/Xerial/wiki/SQLiteJDBCです。SQLite JDBC PRAGMA設定

DBのクエリを高速化するために接続プールも使用しています。私はこのライブラリを使用しています: http://commons.apache.org/dbcp/

これまですべてが良好でした。今、PRAGMAの設定、具体的にはPRAGMA foreign_key = ONを設定する必要があります。テーブルを作成する前に、db内のいくつかのカラム間の一貫性を確認する必要があるからです。

DBを作成すると、自動的にOFFに設定されます。だから私はそれを使用するためにそれをオンにする必要があります。

しかし、私はどのように行うのか分からないが、私はプール可能データソースを用意しております方法は、このようなものです:

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

しかし、私はきちんとそのプラグマを設定する方法がわからないが、私はこの1つことがわかりました可能です:

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

しかし、私はそのプール可能トリッキーな設定に関連して、それを使用する方法がわからない...

任意のアイデア?

+0

この[link] [1]は役に立ちます。 [1]:http://code-know-how.blogspot.ru/2011/10/how-to-enable-foreign-keys-in-sqlite3.html – Marco167

答えて

1

残念ながら、これはSQLiteよりもDBCPの問題です。私は同意する、DBCPのどこかに、指定されたデータソースの設定を設定/更新する場所がなければならない。私はPoolingDataSourceクラスで見ることができますが、もちろんそこにはありません。

考慮すべき1つのオプションは、ConnectionPoolDataSourceインターフェイスを利用するjdbcプーリング・ライブラリを使用することです。 DriverAdapterCPDS呼ばDBCPの拡張機能があることが

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

注:もしそうなら、あなたはこのような接続プールを設定するSQLiteConnectionPoolDataSourceを使用することができます。これはConnectionPoolDataSourceインターフェイスの実装であるため、理論的にはSQLiteConnectionPoolDataSourceをDBCPと共に使用できるはずです。

+0

私はそれを試しました。それは魅力のように働く。私は、このsqlライブラリに加えて、この接続プールマネージャを使用しています:http://www.source-code.biz/miniconnectionpoolmanager/。私にとって、このトピックは解決されています。 – stewenson

関連する問題