2013-05-26 72 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而不使用项目的目录路径,则将创建另一个具有相同名称,相同用户和密码但位于不同位置的数据库。稍后,您会发现自己对代码中的数据库进行了更改,并且没有在服务选项卡的数据库中看到它们。

相关问题