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

标签 java jdbc connection-string derby embedded-database

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

我执行了以下步骤。

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

Step 1

Step 2

step 3

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

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

Step 4

select * from student;

Table

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

Step 5

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

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\10.0\executor-snippets\run.xml:111: The following error occurred while executing this line:
C:\Users\Dell 7559\AppData\Local\NetBeans\Cache\10.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更具体地说 Connecting to databases within the systemDefining the system directory

关于java - 可与 Swing 项目的可执行文件一起导出的嵌入式 Derby 数据库的连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54151155/

相关文章:

java - JNI 无法在 NetBeans 上检测到 __int64

java - 将 Freebase Unicode 代码点转换为 Java 字符串

java - CrateDB 中的驼峰式列名崩溃与 JDBC

c# - 如何从配置生成器中的 Key Vault 获取 secret 值

c# - 如何设置连接字符串,我只更改一个地方?

powershell - 密码中包含 "$"的 SQL Server 连接字符串

Java Swing : main class wait until JFrame is closed

java - 为什么我的 GUI Java 程序中的输出文件为空?

java - 传统的数据库单例连接效果不佳

java - 无法检索我希望使用存储过程选择的值