4

我有一个使用 derby 和 JPA 的项目。我可以在我的应用程序中很好地连接到数据库。我想用 SQL Developer 连接到嵌入式数据库,这样我就可以轻松浏览/查询数据库中的数据。

这是我正在使用的 derby 依赖项:

<dependency>
    <groupId>org.apache.derby</groupId>
    <artifactId>derby</artifactId>
    <version>10.7.1.1</version>
</dependency>

这是我用于 JPA 的连接信息:

<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:derby:fs-hash-database;create=true"/>

使用 SQL Developer 3.2.09,我尝试在 Tools > Preferences > Database > Third Party JDBC Drivers 中添加驱动程序,并添加以下条目:

C:\Users\axiopisty\.m2\repository\org\apache\derby\derby\10.7.1.1\derby-10.7.1.1.jar

但是当我尝试创建新连接时,SQL Developer 仍然只显示 Oracle 和 Access 的选项卡。我无法获得第 3 方驱动程序的 JDBC 选项卡。

我认为问题在于我作为 3rd 方驱动程序添加的 jar 是整个 derby jar,而不仅仅是驱动程序。然而,驱动程序包含在 jar 中。

有谁知道如何配置 SQL Developer 以使用 derby-10.7.1.1.jar 中包含的 org.apache.derby.jdbc.EmbeddedDriver?

4

4 回答 4

7

SQL Developer 不支持 Apache Derby。它仅支持WebSite 上记录的非常有限(且固定)的 DBMS 集:

  • 甲骨文(显然)
  • MySQL(显然)
  • SQL 服务器
  • DB2
  • 微软访问
  • 赛贝斯
  • 太极数据

(所有第三方 DBMS 在网站上都被列为“只读”——无论这意味着什么)

您将需要一个“真正的”通用 JDBC 客户端来针对 Derby(如 Squirrel、DbVisualizer 或 SQL Workbench/J)使用它。

于 2012-09-02T06:33:34.427 回答
2

从 Java 8 开始,可以使用 JDK 附带的驱动程序手动配置 Oracle SQL Developer 以与 Derby 一起使用。

第 1 步:在 Oracle SQL Developer 中,包括 Derby 相关库。

Oracle SQL Developer -> 工具 -> 首选项 -> 数据库 -> 第三方 JDBC 驱动程序。我只是 [添加条目...] C:\Program Files\Java\jdk1.8.0_92\db\lib 下的所有库

步骤 2:手动编辑 connections.xml

编辑 C:\Users\USERNAME\AppData\Roaming\SQL Developer\system4.1.2.20.64\o.jdeveloper.db.connection.12.2.1.0.42.151001.541\connections.xml

在本例中,我使用的是嵌入式 Derby 驱动程序。

<Reference name="DerbyConn" className="oracle.jdeveloper.db.adapter.DatabaseProvider" xmlns="">
  <Factory className="oracle.jdevimpl.db.adapter.DatabaseProviderFactory1212"/>
  <RefAddresses>
     <StringRefAddr addrType="OracleConnectionType">
        <Contents>BASIC</Contents>
     </StringRefAddr>
     <StringRefAddr addrType="RaptorConnectionType">
        <Contents>Microsoft SQL Server</Contents>
     </StringRefAddr>
     <StringRefAddr addrType="customUrl">
        <Contents>jdbc:derby:firstdb;create=true</Contents>
     </StringRefAddr>
     <StringRefAddr addrType="driver">
        <Contents>org.apache.derby.jdbc.EmbeddedDriver</Contents>
     </StringRefAddr>
     <StringRefAddr addrType="subtype">
        <Contents>SQLServer</Contents>
     </StringRefAddr>
     <StringRefAddr addrType="ConnName">
        <Contents>DerbyDB</Contents>
     </StringRefAddr>
  </RefAddresses>

注意:
1. XML 设置可以像上图一样简单。
2. customUrl 是jdbc:derby:firstdb;create=true。这将在 C:\sqldeveloper\bin\firstdb 中初始化 firstdb 模式。您可以使用jdbc:derby:D:\\Project\\derbydb\\firstdb将架构初始化为绝对位置。

于 2017-03-21T06:33:41.250 回答
1

通过将驱动程序文件添加到类路径,然后编辑目录 AppData\Roaming\SQL Developer\system4.0.2.15.21\ o.jdeveloper.db.connection.12.1.3.2.41.140418.1111

我通过复制一个 sql server 连接来做到这一点,但它似乎很高兴地认为它是一个 sql server 数据库。

我在文件中添加了以下内容:

     <参考名称="DATABASENAME" className="oracle.jdeveloper.db.adapter.DatabaseProvider" xmlns=""\>
      <Factory className="oracle.jdevimpl.db.adapter.DatabaseProviderFactory1212"/>
      <参考地址>
         <StringRefAddr addrType="端口">
            <内容>1527/数据库名称</内容>
         </StringRefAddr>
         <StringRefAddr addrType="user">
            <内容>用户名</内容>
         </StringRefAddr>
         <StringRefAddr addrType="NoPasswordConnection">
            <内容>正确</内容>
         </StringRefAddr>
         <StringRefAddr addrType="subtype">
            <Contents>SQLServer</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="RaptorConnectionType">
            <Contents>Microsoft SQL Server</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="ConnName">
            <内容>数据库名称</内容>
         </StringRefAddr>
         <StringRefAddr addrType="主机名">
            <Contents>主机名</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="customUrl">
            <Contents>JDBCURL</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="SavePassword">
            <内容>假</内容>
         </StringRefAddr>
         <StringRefAddr addrType="驱动程序">
            <Contents>org.apache.derby.jdbc.ClientDriver</Contents>
         </StringRefAddr>
      </参考地址>
   </参考>

您必须为数据库配置适当的 DATABASENAME、USERNAME、HOSTNAME 和 JDBCURL 值。

我希望这有帮助

于 2014-06-23T05:36:39.567 回答
0

在经历了许多“错误的 URL 格式”和一些“空指针异常”之后,我终于成功地让这个连接正常工作了!在我的上下文中,不是嵌入式 DERBY 数据库,而是作为网络服务器启动的Derby 。这是清单:

  • 使用带有 JDK 8 的 SQL 开发者版本 20.x(早期可能会 - 未选中)(SQL 开发者需要 171 以上)。后者包含历史上是 Apache DERBY 10 数据库的 javaDB。

  • DERBY 已启动并侦听端口 1527(其默认值)。根据您的上下文,权限必须确实允许本地主机和/或远程连接。我强烈建议您准备好数据库,然后使用本地 Derby命令行工具 'ij'等检查连接性。例如,在 ij 提示符下:

ij> connect 'jdbc:derby://localhost:1527/MyDB;user=MYUSER;password=abcd';
  • 确保将 Derby JDBC 驱动程序添加到 SQL Developer > 工具 > 首选项 > 数据库 > 第三方 JDBC 驱动程序。浏览并添加 你的JDKpath \db\lib\derbyclient.jar;这个单一的罐子就足够了。

  • 创建一个新连接,只是为了在我们必须手动编辑的连接配置文件中创建条目。确保使用正确的用户名和密码为其提供所需的名称。填写其他字段的任何数据并保存您的连接。它还不能工作。

  • 退出 SQL 开发人员并手动编辑连接元数据。在最近的 SQL 开发人员版本中,此文件为 JSON,以前的版本为 XML,两种情况下的属性名称相同。路径是这样的:

C:\Users\YourNAME\AppData\Roaming\SQL Developer\system20.2.0.175.1842\o.jdeveloper.db.connection\connections.json
  • 打开文件并识别您刚刚创建的连接。编辑它以获得类似:

         {
         "info": {
             "role": "",
             "SavePassword": "true",
             "OracleConnectionType": "BASIC",
             "RaptorConnectionType": "Microsoft SQL Server",
             "customUrl": "jdbc:derby://localhost:1527/MyDB",
             "NoPasswordConnection": "TRUE",
             "password": "123456789PLVEC4wxu80ijhx5ALU4ZpRgo123456789=",
             "hostname": "localhost",
             "port": "1527",
             "subtype": "SQLServer",
             "ConnName": "DerbyDB",
             "driver": "org.apache.derby.jdbc.ClientDriver",
             "IS_PROXY": "false",
             "OS_AUTHENTICATION": "false",
             "KERBEROS_AUTHENTICATION": "false",
             "user": "MYUSER"
         },
         "name": "local DERBY",
         "type": "jdbc"
     }
    
  • 是的,您可能已经注意到对“Microsoft SQL Server”作为RaptorConnectionType和“SQLServer”作为subtype的引用。这是魔术。当然,客户端驱动程序类路径也很关键,对于 Derby 网络模式客户端,它是“org.apache.derby.jdbc.ClientDriver”,connectionUrl也是如此。

  • 启动 SQL Developer 并打开将出现在“SQLServer Connections”下的连接

于 2020-08-07T15:56:57.963 回答