如何在 HikariCP 中使用 sqlite 用户函数 api?

iXô*_*iXô 2 java sqlite jdbc hikaricp

我正在使用 mybatis/hikaricp 访问 sqlite 数据库。

该数据库使用 sqlite 用户函数来扩展数据库功能(通过更新触发器)

使用这种函数 un sqlite jdbc 驱动程序是可能的,如下所示:

Connection connection = DriverManager.getConnection("jdbc:sqlite:" + databasePath);
Function.create(connection, "title_sort", new Function()
{
    @Override
    protected void xFunc() throws SQLException
    {
        result(value_text(0));
    }
});
Run Code Online (Sandbox Code Playgroud)

如您所见,我们必须使用 sqlite drivermanager,它将返回围绕 JDBC4Connection 的 SQLiteConnection 包装器(围绕实现 java.sql.Connection 的 JDBC3Connection)

Function.create 函数检查连接实例如下:

if (conn == null || !(conn instanceof SQLiteConnection))
{
    throw new SQLException("connection must be to an SQLite db");
}
Run Code Online (Sandbox Code Playgroud)

所以这是我的问题:如何将这个 api 与 hikaricp 一起使用?

小智 5

像这样:

Connection conn = hikariDataSource.getConnection();
Function.create(connection.unwrap(SQLiteConnection.class),
                "title_sort",
                new Function() {
                   @Override
                   protected void xFunc() throws SQLException {
                      result(value_text(0));
                   }
                }
);
Run Code Online (Sandbox Code Playgroud)

关键部分是connection.unwrap(SQLiteConnection.class).