【问题标题】:connecting to a file-based derby database连接到基于文件的 derby 数据库
【发布时间】:2012-05-26 20:03:24
【问题描述】:

我想使用 apache derby 处理基于文件的数据库。 我想知道是否有人可以carify如何使用netbeans作为IDE来连接和创建这个数据库。 我通过 derby 手册试图弄清楚这一点,但我得到的只是“嵌入式 Derby JDBC 数据库连接”,有人告诉我这不是基于文件的方法,无论哪种方式,连接似乎都不起作用。 任何帮助将不胜感激

【问题讨论】:

  • 我认为“嵌入式 Derby JDBC DB 连接”是您正在寻找的解决方案。我在下面的回答中描述了如何使用当前的 NetBeans IDE UI 来操作 derby。无论哪种方式,您的数据最终都会存储在文件中。主要区别在于您是选择嵌入式路由还是客户端服务器路由,其中​​客户端服务器路由需要主机操作系统上的端口,允许多个客户端同时访问数据库。

标签: java netbeans database-connection derby


【解决方案1】:

毫无疑问,您要使用的驱动程序是 derby.jar 中的嵌入式驱动程序。与其像有足够多的例子那样进入“事物的编码方面”,我更喜欢在开始编码之前使用 netbeans 本身来完成所有事情。

由于我使用嵌入式方法将wireshark / tcpdump / nmap文件转换为数据库条目,所以我使用了一种稍微不同的方法。

由于我更喜欢​​ Derby 的最新稳定版本而不是已安装的版本,所以我有一个稍微不同的方法,它允许我使用我想要的任何版本,并将数据库放在我想要的任何 ar/w 数据目录中在文件系统中。

  1. 创建:mkdir -p $HOME/opt/derby 和 cd ~/opt/derby。
  2. 从 db.apache.org 下载最新版本,unbundle 位于 $HOME/opt/derby/
  3. 创建符号链接:ln -s pwd/version pwd/latest。
  4. 创建符号链接:ln -s pwd/latest pwd
  5. 启动 netbeans。

从这里开始,您可以在 netbeans 中做任何事情:

  1. 创建一个 Ant 库并将其命名为“ASF-Derby-Emb。”:Tools->Ant Libraries->New Library。
  2. 在设置面板中,将类路径设置为 /home/[loginid]/opt/derby/default/lib/derby.jar,并可选择添加 derbytools.jar。
  3. 如果您已下载源代码,请单击源选项卡并添加到源代码的路径中。
  4. 单击 javadoc 选项卡和 /home/[loginid]/opt/derby/default/javadocs

当您开始编码时,只需添加 ASF-Derby-Emb 库,它就会自动复制到您的“dist”中。

现在设置 JavaDB。

  1. 设置服务选项卡:窗口->服务并选择该选项卡。
  2. 选择 JavaDB 并右键单击并停止可能正在运行的 JavaDB。
  3. 选择 JavaDB 并右键单击并单击属性菜单项,这将弹出一个属性对话框。
  4. 浏览到 JavaDB 安装目录:在 $HOME/opt/derby/default 中。
  5. 要么保持数据库安装目录位置不变,要么浏览到要放置它的目录,但请确保您具有读/写权限。
  6. 单击“确定”,现在您有了不同的 JavaDB 安装和数据库位置。

只需更改数据库位置,您就可以将数据库放在您想要的任何位置。或者您可以在代码中完成与 url 相同的事情:jdbc:derby://数据库位置目录。

无论如何,现在我可以设置我的数据库了。

  1. 选择 JavaDB 并右键单击并选择“创建数据库”,然后填写对话框,数据库将在属性文件中设置的目录中初始化。
  2. 创建连接:选择 JavaDB,然后选择已创建的数据库的名称。

从这一点来看,有三种选择:

  1. 什么都不做,创建创建表等所需的代码。
  2. 创建一个项目并创建一个名为 sql 的顶级项目目录,并将定义表等的所有 sql 脚本放置在该目录中。
  3. 使用'内置设施:服务->jdbc:derby://???并使用出现的工具创建表并允许您输入必要的 sql。

就个人而言,(2) 我发现最初是最好的方法。如果您有预先存在的带有 .sql 扩展名的 sql 脚本,只需在项目下打开它们,它们就会被加载到 sql 编辑器中并可以在那里执行。

也可以使用 (3) 并保存生成的脚本。

无论如何,在编码开始之前可以创建很多东西。有很多方法可以做到这一点。我宁愿在编码之前全部创建——它使开发测试用例变得更加容易,并且使用前面我不必跳进跳出 netbeans 来修改东西。

【讨论】:

    【解决方案2】:

    当您下载 NetBeans 7.1.2 时,您将获得 glassfish 应用服务器的“全部”包。在安装了 glassfish 之后,在 IDE 中,您应该能够选择 Services 选项卡 > Expand Databases,您应该会看到 Java DB。 R. 单击 Java DB 并选择启动服务器。然后 R。再次单击并选择创建数据库。输入数据库名称、用户和密码。顺便说一句,我通常将 APP 用于用户和密码,因为这样它也成为默认模式,我不必为生产环境进行任何更改。

    现在在 Java DB 组中,您应该会看到您创建的新数据库。 R. 单击它并选择连接。您应该会在 Databases 组下看到一个连接项。展开此项,您应该会看到以粗体显示的 APP 架构,表明它是默认架构。展开它并 R。单击 Tables 选择 Create Table,您将获得一个帮助您填充表格的 ui。重复直到创建所有表。使用 ide 创建表的其他方法是右键单击表并选择执行命令,您可以在其中运行 DDL 来定义表模式。这是我创建数据库的方式,将我的脚本保存为 .sql 文件,这样我就可以删除数据库并根据需要重新运行它。

    这是我用来在 derby 中创建表的 dbinit.sql 脚本示例。

    create table usertable (
        username varchar(128) NOT NULL CONSTRAINT USER_PK PRIMARY KEY ,
        password varchar(128) NOT NULL,
        email varchar(128) NOT NULL,
        firstname varchar(128) NOT NULL,
        lastname varchar(128) NOT NULL
    );
    
    create table grouptable(
        username varchar(128) NOT NULL,
        groupid  varchar(128) NOT NULL,
        CONSTRAINT GROUP_PK PRIMARY KEY(username, groupid),
        CONSTRAINT USER_FK FOREIGN KEY(username) REFERENCES usertable(username)
            ON DELETE CASCADE ON UPDATE RESTRICT
    );
    
    insert into usertable(username,password,firstname,lastname) 
        values ('admin', '21232f297a57a5a743894a0e4a801fc3','','');
    insert into grouptable(username,groupid) values ('admin', 'USER');
    insert into grouptable(username,groupid) values ('admin', 'ADMIN');
    

    您可以通过右键单击数据库 R 轻松删除您创建的数据库。单击要删除的数据库并选择删除。并重用您的脚本来重新生成它。

    希望这会有所帮助! :)

    【讨论】:

      【解决方案3】:

      如果你想在 Derby 中有一个基于文件的数据库,你应该下载,Derby

      解压缩文件。 在 bin 目录中运行 startNetworkServer.bat。 它将启动 derby 服务器,该服务器将监听 1527 号端口。

      现在在你的 java 代码中:

      DriverName=org.apache.derby.jdbc.ClientDriver

      ConnectionString =jdbc:derby://localhost:1527/schema_name;create=true

      Morover,你也可以像我们在 oracle 中一样查询 derby DB。

      运行位于 bin 目录中的 ij.bat。 然后在提示符下:

      connect '在此处指定连接网址'

      您可以像 oracle 提示一样触发 sql 查询。

      如果您想在不同的端口上运行 derby 服务器,请在 cmd 处执行以下命令:

      startnetworkserver.bat -p 1234

      【讨论】:

        【解决方案4】:

        要创建一个,您的 jdbc url 将是:jdbc:derby:foo;create=true,它将在 derby 系统目录中创建一个名为 foo 的数据库。如果要在硬盘驱动器的绝对位置创建一个,请指定绝对路径。 jdbc:derby:/home/me/foo;create=true.

        创建数据库后,您可以使用相同的 url 连接到它,也可以删除 ;create=true 部分。

        您可以通过系统属性设置 derby 系统目录,例如System.setProperty("derby.system.homeSystem.setProp", "/home/bar/whatever");。我认为您需要在启动 derby 数据库之前执行此操作,但之后我从未尝试过这样做。我发现为应用程序设置 derby 系统主页并指定相对数据库 url 可以更好地工作,但这是个人喜好。

        【讨论】:

        • 那么 jdbc 是基于文件的版本吗?
        • 是的,在 Java 中,您总是通过 JDBC 与 Derby 交互。 jdbc:derby: 是嵌入式连接的前缀。网络数据库连接不同。
        • 首先感谢您的回答,其次我仍然无法连接到数据库,我想我需要先定义数据库,我通过netbeans接口做到了(不知道该怎么做),这给了我数据库的 url,即 jdbc:derby:history;create=true 我将所有 derby jar 文件移动到我的项目的“lib”目录中。我仍然收到“找不到合适的驱动程序”错误,所以我在其他论坛上查看过,但他们所说的似乎不起作用。我认为它与目录有关,但我无法弄清楚..
        • IIRC,嵌入式驱动程序不是自注册的。做一个new EmbeddedDriver()(让netbeans为你选择一个正确的——如果没有,那么你的类路径是错误的),丢弃结果然后尝试连接。
        猜你喜欢
        • 1970-01-01
        • 2020-11-18
        • 1970-01-01
        • 1970-01-01
        • 2016-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-12
        相关资源
        最近更新 更多