如何使用SQL Developer连接到嵌入式Derby数据库

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 尝试通过以下方式在“工具”>“首选项”>“数据库”>“第三方JDBC驱动程序”中添加驱动程序:

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

但是当我尝试创建新的连接时,SQL开发人员仍然只显示Oracle和Access的选项卡。我无法获得第三方驱动程序的JDBC选项卡。
我认为问题在于我添加的第三方驱动程序jar包是整个derby jar包,而不仅仅是驱动程序。然而该驱动程序包含在jar包中。
有人知道如何配置SQL Developer使用derby-10.7.1.1.jar中包含的org.apache.derby.jdbc.EmbeddedDriver吗?
4个回答

7
SQL Developer不支持Apache Derby,它仅支持一组非常有限(且固定)的DBMS (在网站上有记录)
  • Oracle(显然)
  • MySQL(显然)
  • SQL Server
  • DB2
  • MS Access
  • Sybase
  • Teradata
(所有第三方DBMS都在网站上列为“只读” - 不管那是什么意思)
您需要一个“真正”的通用JDBC客户端才能使用它与Derby配合使用,例如Squirrel、DbVisualizer或SQL Workbench/J。

官方上,SQL Developer并不支持Apache Derby。然而,根据@user3766196的回答,可以手动将Derby连接添加到SQL Developer中。 - oraclesoon

2

Oracle SQL Developer可以使用JDK自带的驱动程序手动配置,以便与Derby一起使用。

步骤1:在Oracle SQL Developer中包含Derby相关库。

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

步骤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将模式初始化到绝对位置。


只需将上述XML中的org.apache.derby.jdbc.EmbeddedDriver替换为org.apache.derby.jdbc.ClientDriver,将jdbc:derby:firstdb;create=true替换为jdbc:derby://localhost:1527/D:\Project\derbydb\firstdb;create=true,然后SQLDeveloper就可以连接到网络Derby服务器了。 - oraclesoon
1
在 Mac OS X 上,连接文件位于 /Users/<username>/.sqldeveloper/system17.4.0.355.2349/o.jdeveloper.db.connection/connections.xml - axiopisty
刚刚确认,这适用于SQL Developer 17.4.0版本。 - axiopisty

1
我成功地在SQL Developer 4.0.2.15上使用网络驱动程序,通过将驱动程序文件添加到类路径中,然后编辑AppData\Roaming\SQL Developer\system4.0.2.15.21\o.jdeveloper.db.connection.12.1.3.2.41.140418.1111目录中的connections.xml文件。我通过复制SQL Server连接来实现这一点,但它似乎很高兴地认为它是一个SQL Server数据库。
我在文件中添加了以下内容:
     <Reference name="DATABASENAME" className="oracle.jdeveloper.db.adapter.DatabaseProvider" xmlns=""\>
      <Factory className="oracle.jdevimpl.db.adapter.DatabaseProviderFactory1212"/>
      <RefAddresses>
         <StringRefAddr addrType="port">
            <Contents>1527/DATABASENAME</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="user">
            <Contents>USERNAME</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="NoPasswordConnection">
            <Contents>TRUE</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="subtype">
            <Contents>SQLServer</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="RaptorConnectionType">
            <Contents>Microsoft SQL Server</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="ConnName">
            <Contents>DATABASENAME</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="hostname">
            <Contents>HOSTNAME</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="customUrl">
            <Contents>JDBCURL</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="SavePassword">
            <Contents>false</Contents>
         </StringRefAddr>
         <StringRefAddr addrType="driver">
            <Contents>org.apache.derby.jdbc.ClientDriver</Contents>
         </StringRefAddr>
      </RefAddresses>
   </Reference>
这是一个关于数据库连接的参考配置,其中包括了数据库名称、用户名、端口号、主机名、JDBC URL等信息。
你需要使用适当的值来配置 DATABASENAME、USERNAME、HOSTNAME 和 JDBCURL,以便与你的数据库配合使用。
希望这能有所帮助。

0

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

  • 使用SQL开发人员版本20.x(早期版本可能可以-未经检查),配合JDK 8(SQL开发人员需要171以上版本)。后者包含javaDB,它是历史上的Apache DERBY 10数据库。

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

ij> connect 'jdbc:derby://localhost:1527/MyDB;user=MYUSER;password=abcd';
  • 确保将Derby JDBC驱动程序添加到SQL Developer > Tools > Preferences > Database > Third Party JDBC Drivers。浏览并添加yourJDKpath\db\lib\derbyclient.jar;这个单一的jar文件就足够了。

  • 创建一个新连接,只是为了在连接配置文件中创建条目,我们将不得不手动编辑。确保给它一个你想要的名称,带有正确的用户和密码。填写其他字段的任何数据并保存您的连接。它还不能工作。

  • 退出SQL开发人员并手动编辑连接元数据。在最近的SQL Developer版本中,此文件为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的引用。这就是魔法。当然,客户端driver类路径也很关键,对于Derby网络模式客户端,它是“org.apache.derby.jdbc.ClientDriver”,connectionUrl也是如此。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接