在c3p0连接池中设置SQLite连接属性

3
为了指定 SQLite 连接属性,需要使用 org.sqlite.SQLiteConfig,示例如下: ```html

org.sqlite.SQLiteConfig 用法如下:

```
    org.sqlite.SQLiteConfig config = new org.sqlite.SQLiteConfig();
    config.setReadOnly(true);
    config.setPageSize(4096); //in bytes
    config.setCacheSize(2000); //number of pages
    config.setSynchronous(SQLiteConfig.SynchronousMode.OFF);
    config.setJournalMode(SQLiteConfig.JournalMode.OFF);
    SQLiteConnectionPoolDataSource dataSource = new SQLiteConnectionPoolDataSource();

使用c3p0创建连接池的步骤如下:

        ComboPooledDataSource cpds = new ComboPooledDataSource();
        cpds.setDriverClass("org.sqlite.JDBC");
        cpds.setJdbcUrl("jdbc:sqlite:/foo/bar");
        cpds.setMaxPoolSize(10);

问题:如何创建一个数据源,将两者结合起来,让我可以设置连接池的最大池大小和SQLite的同步模式?

1个回答

4

尝试

//put the imports where they really go, obviously...
import javax.sql.*;
import org.sqlite.*;
import com.mchange.v2.c3p0.*;

// configure SQLite
SQLiteConfig config = new org.sqlite.SQLiteConfig();
config.setReadOnly(true);
config.setPageSize(4096); //in bytes
config.setCacheSize(2000); //number of pages
config.setSynchronous(SQLiteConfig.SynchronousMode.OFF);
config.setJournalMode(SQLiteConfig.JournalMode.OFF);

// get an unpooled SQLite DataSource with the desired configuration
SQLiteDataSource unpooled = new SQLiteDataSource( config );

// get a pooled c3p0 DataSource that wraps the unpooled SQLite DataSource
DataSource pooled = DataSources.pooledDataSource( unpooled );

pooled数据源现在将成为一个c3p0 PooledDataSource,它包装了一个已按您要求配置的SQLite非池化数据源。

请参阅c3p0的文档"使用DataSources工厂类"DataSources工厂类的API文档。

此外,还可以查看SQLite JDBC的javadoc,我从这里下载以回答这个问题。


你不需要一个ConnectionPoolDataSource吗? - Peter
对不起,我之前的评论有误。我的意思是这样问的:SQLite有一个ConnectionPoolDataSource。使用它有什么优势吗? - Peter
不,你最好使用简单的DataSource,并让c3p0提供自己的ConnectionPoolDataSource。你可以让c3p0包装一个驱动程序的ConnectionPoolDataSource(参见c3p0的文档,类似于“高级:构建自己的DataSource”),但这样做会失去一些c3p0的功能,并且通常收益很少。 - Steve Waldman
这个代码是可以工作的,但由于我对此还不熟悉,所以花了一点时间才弄清楚我必须使用 unpooled.setUrl("jdbc:sqlite:" + dbPath); 而不是 unpooled.setDatabaseName(dbPath); 来指定我要连接的数据库。在我做出更改之前,我看到了一些奇怪的错误。 - kmort
如何从中获取ConnectionPoolDataSource?该示例展示了如何获取DataSource,但没有展示如何获取ConnectionPoolDataSource。 - edu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接