Java項目使用SQLite數據庫後無法啟動的問題
阿新 • • 發佈:2017-08-23
brush 沒有 record div library rac 輕量 except logs
背景:
Java > maven 的 jar 項目
功能是記錄用戶的每天的按鍵次數
使用 jar2exe 工具將 jar 轉為 exe 可執行文件
原本項目中使用的Mysql數據庫,使用Mybatis工具操作運行沒有問題
後來發現對於一個小工具來說,用Mysql太麻煩,因為需要安裝配置Mysql等等.
於是我上網查了查,找到了一個輕量級的嵌入式數據庫SQLite
導入一個 org.xerial > sqlite-jdbc jar 包,直接就可以創建數據庫文件了十分方便
當時用的 jar 是最新的版本 3.20.0
費了一天的勁,將之前的持久層代碼從Mysql替換成了SQLite
問題介紹:
在編輯器內運行良好
編譯成 jar 後,使用 java -jar ***.jar 運行良好
當我把 jar 用 jar2exe 轉成 exe 運行文件後, 它就報錯了
錯誤信息如下:
java.sql.SQLException: Error opening connection at org.sqlite.core.CoreConnection.open(CoreConnection.java:215) at org.sqlite.core.CoreConnection.<init>(CoreConnection.java:76) at org.sqlite.jdbc3.JDBC3Connection.<init>(JDBC3Connection.java:26) at org.sqlite.jdbc4.JDBC4Connection.<init>(JDBC4Connection.java:24) at org.sqlite.SQLiteConnection.<init>(SQLiteConnection.java:45) at org.sqlite.JDBC.createConnection(JDBC.java:114) at org.sqlite.JDBC.connect(JDBC.java:88) at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:119) at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:143) at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:132) at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolManager.initializeAutomaticTestTable(C3P0PooledConnectionPoolManager.java:772) at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolManager.createPooledConnectionPool(C3P0PooledConnectionPoolManager.java:696) at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolManager.getPool(C3P0PooledConnectionPoolManager.java:257) at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolManager.getPool(C3P0PooledConnectionPoolManager.java:271) at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128) at com.play.util.SQLiteUtil.openConnection(SQLiteUtil.java:56) at com.play.base.BaseDaoImpl.execute(BaseDaoImpl.java:54) at com.play.dao.impl.KeyRecordDayDaoImpl.add(KeyRecordDayDaoImpl.java:22) at com.play.DataManager.addToDayRecord(DataManager.java:75) at com.play.DataManager.addBeat(DataManager.java:58) at com.play.DataManager.lambda$new$0(DataManager.java:32) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.NullPointerException at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:315) at org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:64) at org.sqlite.core.NativeDB.load(NativeDB.java:56) at org.sqlite.core.CoreConnection.open(CoreConnection.java:211) ... 21 more
很傷腦筋,上網查了半天沒有查到相關問題
最終FQ到谷歌上搜索了一番
找到了一個類似的問題,全是英文,具體沒看太懂
但是裏面提到了 sqlite-jdbc jar 版本的問題.
於是我抱著試試看的心態
將版本改成了 3.8.11.2
編譯完成 > 轉 exe 完成 > 運行成功> 問題解決!
Java項目使用SQLite數據庫後無法啟動的問題