【问题标题】:How to pack a SQLite database into a jar?如何将 SQLite 数据库打包到 jar 中?
【发布时间】:2011-12-02 15:39:48
【问题描述】:

我有一个 Java 项目,它使用一个小型 SQLite 数据库。

现在我想创建一个可执行的 jar 文件,其中包含数据库文件和驱动程序 (sqlitejdbc-v056),以便拥有一个包含所有内容的包。

我的包结构如下:

Bank
|
| 
+---src
|   ...
|           
+---bin
|   ...
|           
+---data
|       bank_database.db
|       
+---img
|       ajax-refresh-icon.gif
|       
+---doc
|       Datenbankschema.uxf
|       
\---resources
        sqlitejdbc-v056.jar

我用这个小的 Java 类访问数据库:

package model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBHandle {

    Connection conn;

    public DBHandle() throws Exception {
        Class.forName("org.sqlite.JDBC");
    }

    public Connection openConnection() throws SQLException {
        conn = DriverManager.getConnection("jdbc:sqlite:data\\bank_database.db");
        return conn;
    }

    public void closeConnection() throws SQLException {
        if (!conn.isClosed()) {
            conn.close();
        }

    }

}

如果我使用 Eclipse 导出管理器将所有这些东西打包到一个 jar 中并尝试执行它,它会为 JDBC 驱动程序抛出一个 ClassNotFoundException

我该如何解决这个问题?

是否甚至可以将资源修改为与数据库有关的 jar?

【问题讨论】:

  • 如果您将数据库文件放入 jar 中,您将无法在运行时更新它 - 您知道吗?
  • 不,我不是 :-/ ... 看来我得重新审视我的概念了

标签: java sqlite packaging


【解决方案1】:

AFAIK 你不能毫不费力地修改 jar 内的资源(基本上它是一个 zip,因此它应该是可能的,但 JVM 等可能会锁定文件)。

此外,您不能将一个罐子放入另一个罐子中。但是,如果需要,您可以解压缩驱动程序 jar 并将内容包含在您的 jar 中。 Maven 程序集插件有一个目标:jar-with-dependencies

【讨论】:

  • “另外,你不能把一个罐子放进另一个罐子里。” - 你应该看看 onejar (one-jar.sourceforge.net)
  • @smp7d 有趣,我不知道这一点。感谢分享。
【解决方案2】:

要解决您的ClassNotFoundException,您需要将 sqllite jar 添加到类路径

见:http://docs.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html

【讨论】:

  • 我认为问题不在于SQLite engine jar。这个问题至少有一部分是关于bank_database.db
  • 是的,我将驱动程序添加到清单文件中的类路径中。但是现在它找不到数据库。它在正常的文件路径中搜索。我是否也必须将数据库文件添加到清单中?
【解决方案3】:

我的偏好是使用一个名为 one jar 的实用程序。您可以使用从 ant 或 maven 调用它,我将它用于工作和我的个人项目。我有一篇不错的博客文章解释了如何使用它:Building Self Contained Executable Jars 2 ways

【讨论】:

    猜你喜欢
    • 2013-03-19
    • 2017-07-30
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    相关资源
    最近更新 更多