如何在 HikariCP 中使用 sqlite 用户函数 api?
How can I use sqlite user function api with 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));
}
});
如您所见,我们必须使用 sqlite drivermanager,它将 return 围绕 JDBC4Connection 的 SQLiteConnection 包装器(围绕实现 java.sql.Connection 的 JDBC3Connection)
Function.create函数检查连接实例如下:
if (conn == null || !(conn instanceof SQLiteConnection))
{
throw new SQLException("connection must be to an SQLite db");
}
所以这是我的问题:如何将此 api 与 hikaricp 一起使用?
像这样:
Connection conn = hikariDataSource.getConnection();
Function.create(connection.unwrap(SQLiteConnection.class),
"title_sort",
new Function() {
@Override
protected void xFunc() throws SQLException {
result(value_text(0));
}
}
);
关键部分是connection.unwrap(SQLiteConnection.class)
。
我正在使用 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));
}
});
如您所见,我们必须使用 sqlite drivermanager,它将 return 围绕 JDBC4Connection 的 SQLiteConnection 包装器(围绕实现 java.sql.Connection 的 JDBC3Connection)
Function.create函数检查连接实例如下:
if (conn == null || !(conn instanceof SQLiteConnection))
{
throw new SQLException("connection must be to an SQLite db");
}
所以这是我的问题:如何将此 api 与 hikaricp 一起使用?
像这样:
Connection conn = hikariDataSource.getConnection();
Function.create(connection.unwrap(SQLiteConnection.class),
"title_sort",
new Function() {
@Override
protected void xFunc() throws SQLException {
result(value_text(0));
}
}
);
关键部分是connection.unwrap(SQLiteConnection.class)
。