• Java项目使用SQLite数据库后无法启动的问题


    背景:

      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
    

      很伤脑筋,上网查了半天没有查到相关问题

      最终翻墙到谷歌上搜索了一番

      找到了一个类似的问题,全是英文,具体没看太懂

      但是里面提到了 sqlite-jdbc jar 版本的问题.

      于是我抱着试试看的心态

      将版本改成了 3.8.11.2

      编译完成 > 转 exe 完成 > 运行成功> 问题解决!

  • 相关阅读:
    通过SQL Server 2008数据库复制实现数据库同步备份
    SQL Server进制
    Server2008+SQL2008 日志读取代理器未运行 进程无法在“WINXXX”上执行“sp_replcmds”
    swing中使用皮肤包
    JTextArea的自动定位最后一行
    JFrame如何设置背景图片
    swing中单击回车相当于点击登录
    execute、executeUpdate、executeQuery三者的区别(及返回值)
    JTable设置透明
    在eclipse中导入android项目
  • 原文地址:https://www.cnblogs.com/imyjy/p/7419320.html
Copyright © 2020-2023  润新知