可与 Swing 项目的可执行文件一起导出的嵌入式 Derby 数据库的连接字符串

Connection string for Embedded Derby Database that can be exported with executable file of Swing Project

我想将 Derby 嵌入式数据库连接到我的 Swing 应用程序以导出为 executable 文件。

我执行了以下步骤。

我已经从服务选项卡创建了嵌入式数据库。

我已经在我们的嵌入式数据库中创建了 table

create table student(id int, name varchar(50), class varchar(10));
insert into student values(1,'Akshay','FYCS'),(2,'Narayan','SYCS');

select * from student;

我已经创建了 Swing 项目并添加了 Derby Driver 库

然后我编码从数据库中检索值

package embeddeddb;

import java.sql.*;

public class EmbeddedDB 
{
    public static void main(String[] args) throws SQLException, ClassNotFoundException
    {
        Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
        Connection con=DriverManager.getConnection("jdbc:derby:myDB","username","password");
        Statement stmt=con.createStatement();

        ResultSet rs=stmt.executeQuery("select NAME from STUDENT where ID=1");
        rs.next();
        System.out.println(rs.getString(1));
    }  
}

我遇到了这样的错误,

run:
Exception in thread "main" java.sql.SQLException: Database 'myDB' not found.
    at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedConnection.newSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedConnection.handleDBNotFound(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source)
    at org.apache.derby.jdbc.InternalDriver.getNewEmbedConnection(Unknown Source)
    at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
    at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
    at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at embeddeddb.EmbeddedDB.main(EmbeddedDB.java:11)
Caused by: ERROR XJ004: Database 'myDB' not found.
    at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
    at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown Source)
    ... 14 more
C:\Users\Dell 7559\AppData\Local\NetBeans\Cache.0\executor-snippets\run.xml:111: The following error occurred while executing this line:
C:\Users\Dell 7559\AppData\Local\NetBeans\Cache.0\executor-snippets\run.xml:94: Java returned: 1
BUILD FAILED (total time: 0 seconds)

我知道问题出在连接字符串上。

Connection con=DriverManager.getConnection("jdbc:derby:myDB","username","password");

如何解决?请帮忙。

mydb 是相对路径,相对于 Derby 的系统目录,如果使用 Derby Embedded,则默认为应用程序的当前工作目录。如果您在 Netbeans 中使用 URL,它是相对于 NetBeans 当前工作目录的,如果您从您自己的应用程序中使用它,它是相对于该应用程序的当前工作目录。

换句话说,jdbc:derby:myDB 使用的数据库是特定于应用程序的(或更正确:特定于当前工作目录)。在 NetBeans 中您的数据库存在,在您的应用程序中它不存在。

您需要使用数据库的绝对路径,或者确保数据库是在适当的位置创建的(例如应用程序的当前工作目录),或者您需要配置 Derby 以使用特定目录通过设置系统 属性 derby.system.home.

另请参阅 Derby 文档 Connecting to databases and more specifically Connecting to databases within the system and Defining the system directory