如何将SQLite数据库打包到jar中?

时间:2011-12-02 15:39:48

标签: java sqlite packaging

我有一个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吗?

3 个答案:

答案 0 :(得分:3)

AFAIK你不能在没有太多麻烦的情况下修改jar内的资源(基本上它是一个zip,因此它应该是可能的,但是JVM可能存在文件锁等。)。

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

答案 1 :(得分:1)

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

请参阅:http://docs.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html

答案 2 :(得分:0)

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