2011-12-02 556 views
1

我有一個Java項目,它使用一個小的SQLite數據庫。如何將SQLite數據庫打包到jar中?

現在我想創建一個可執行的jar文件,其中的數據庫文件和驅動程序(sqlitejdbc-v056)裏面有一個包含全部的包。

我的包結構如下:

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

我訪問DB用這個小的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的出口部經理一個罐子,嘗試執行它會爲JDBC驅動程序拋出一個ClassNotFoundException

我該如何解決這個問題?

甚至可以將資源修改爲關於數據庫的jar嗎?

+1

如果將數據庫文件放入jar文件中,您將無法在運行時更新它 - 您是否意識到這一點? – Thomas

+0

不,我不是: -/...看起來我必須檢查我的概念 – Demnogonis

回答

2

AFAIK你不能修改,沒有什麼麻煩一個罐子內的資源(基本上它是一個zip,因此它應該是可能的,但可能有JVM等文件鎖定)。

此外,你不能把一個罐子放到另一個。但是,如果需要,可以拆開驅動程序jar包並將內容包含在jar中。 Maven程序集插件的目標是:jar-with-dependencies

+1

「另外,你不能把一個罐子放進另一個罐子。」 - 你應該看看onejar(http://one-jar.sourceforge.net/) – smp7d

+0

@ smp7d有趣的是,我沒有意識到這一點。感謝分享。 – Thomas

1

解決您的ClassNotFoundException,你需要的sqllite jar添加到classpath

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

+0

我認爲這個問題不是關於'SQLite引擎jar'的問題。這個問題至少有一部分是關於'bank_database.db'的 –

+0

看起來像2個問題 – smp7d

+0

是的,我將該驅動程序添加到清單文件中的Classpath。但現在它找不到數據庫。它在普通的文件路徑中搜索。我是否也必須將數據庫文件添加到清單中? – Demnogonis

0

我的首選是使用稱爲一個罐子的工具。你可以使用來自ant或maven的呼叫,並將其用於工作和個人項目。我有一篇像樣的博客文章,解釋瞭如何使用它:Building Self Contained Executable Jars 2 ways

相關問題