2013-05-26 52 views
3

我已經使用netbeans創建了一個嵌入式數據庫並向其中添加了數據。所以現在我想查詢數據庫,代碼運行平穩但不顯示數據。這裏是我的代碼:使用derby在netbeans中查詢嵌入式數據庫

import java.sql.*; 
public class EmbeddedDB 
{ 

public static void main(String[] args) 
{ 
    Connection con = null; 
    Statement st = null; 
    ResultSet rs = null; 
    try 
    { 
     Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 
     con = DriverManager.getConnection("jdbc:derby:CustDB;create=true", "app", "app"); 
     System.out.println("connected"); 
     st = con.createStatement(); 
     System.out.println("statement created"); 

     rs = st.executeQuery("select * from APP.TABLEX"); 
     System.out.println("retrieving ..."); 
     System.out.println(rs.getString(1)); 

    } 
    catch(ClassNotFoundException | SQLException c) 
    { 
    } 
} 
} 

那麼會出現什麼問題?該數據庫是在嵌入式模式下創建的。

+0

您確定您添加數據的CustDB數據庫與此類主要方法運行時類路徑中的相同嗎? – Tap

+0

@Tap,是的。在編寫查詢代碼之前,我創建了一個CustDB。 –

+0

不過,我會搜索CustDB的文件系統。如果它變成兩次,那麼你的程序創建一個新的空數據庫。 – Tap

回答

3

你告訴我們I have created an embedded database ... and added data to it.

因此,該數據庫必須在Netbeans的服務可見。

enter image description here

NO ;create=true
您應該連接到您在屬性中看到的相同URL。而已。
展開數據庫URL或查看底部。

enter image description here

con = DriverManager.getConnection("jdbc:derby:C:/Dokumente und Einstellungen/Administrator/.netbeans-derby/sample","app","app"); 

在嵌入模式德比應用程序的JVM(Java虛擬機)中運行。在這種模式下,只有應用程序可以訪問數據庫,例如另一個用戶/應用程序將無法訪問數據庫。

只有一個應用程序可以訪問數據庫。
因此,請在您的應用程序中連接到Netbeans服務中斷開連接。

+0

好吧,我知道了,但我不能在另一個系統上運行它,因爲我想打包它進行分發。 –

0

我想在前面的答案中加上一個重要的說明,因爲我發現自己在嘗試使這個功能發揮作用的幾個小時內有點失落。我的觀點是讓你瞭解Netbeans服務選項卡如何與嵌入式德比數據庫一起工作。 使用:

con = DriverManager.getConnection("jdbc:derby:CustDB;create=true", "app", "app"); 

它會在相同的目錄中NetBeans項目數據庫。您可以通過添加目錄路徑來更改此行爲:

jdbc:derby:directory_path/CustDB;create=true 

因此,當您執行程序時,它將在指定的路徑中創建數據庫。

現在,當您在服務選項卡中創建與嵌入式數據庫的連接時,您正在連接到現有數據庫或創建一個新數據庫。我將使用綠色的例子:

一旦你從第一篇文章與

jdbc:derby:CustDB;create=true 

執行首次代碼創建項目的目錄路徑的數據庫。 要能夠使用從服務選項卡編輯此數據庫,您必須創建到嵌入式數據庫的新連接。您必須使用名稱CustDB,相同的用戶應用程序和相同的密碼應用程序。

這裏很重要的一點就是使用該項目的目錄路徑的網址,所以在窗口中創建的URL字段連接時,您必須使用:

jdbc:derby:directory_path_of_the_project/CustDB; 

現在,如果喲按測試連接按鈕,一切都應該沒問題。

如果在此處使用create=true而不使用項目的目錄路徑,則將創建另一個具有相同名稱,相同用戶和密碼但位於不同位置的數據庫。稍後,您會發現自己對代碼中的數據庫進行了更改,並且沒有在服務選項卡的數據庫中看到它們。

相關問題