2017-02-20 167 views
0

我正在使用mybatis/hikaricp來訪問sqlite數據庫。如何在HikariCP中使用sqlite用戶函數api?

該數據庫使用SQLite的用戶功能來擴展數據庫功能(通過更新觸發器)

使用這種功能未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,它將返回一個圍繞JDBC4Connection的SQLiteConnection包裝(圍繞JDBC3Connection實現java.sql.Connection)

Function.create函數檢查連接實例CE如下:

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

所以這裏是我的問題:我該如何使用這個API與hikaricp?

回答

2

像這樣:

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)

+0

謝謝!我沒有嘗試這個解決方案,因爲我昨天使用JPA/Eclipslink失敗,因爲解包無法返回給我一個SQLiteConnection的實例。但是對於HikariCP,您的解決方案可以正常工作。 –

相關問題