连接到 Derby 网络服务器时找不到数据库错误

Posted

技术标签:

【中文标题】连接到 Derby 网络服务器时找不到数据库错误【英文标题】:Database not found error when connecting to Derby network server 【发布时间】:2013-06-26 20:44:38 【问题描述】:

我在初始化我的 javadb 网络服务器和设置与它的连接时遇到问题。这是一个 JavaFX 程序。

这是我目前所拥有的:

try 
        Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
        javadbserver = new NetworkServerControl();
        javadbserver.start(null);
     catch (ClassNotFoundException e) 
        Logger.getLogger(MainGuiController.class.getName()).log(Level.SEVERE, null, ex);
        System.out.println("Where is your JavaDB embedded Driver?");
        return;
    

    String dbName = "mydb";
    String dbUser = "auser";
    String dbPass = "password";

    PreparedStatement prepstmt;

    try 
        this.conn = DriverManager.getConnection("jdbc:derby://localhost:1527/mydb;user=auser;password=password");
        System.out.println("Went through!");
     catch (SQLException ex) 
        Logger.getLogger(MainGuiController.class.getName()).log(Level.SEVERE, null, ex);
    

我总是捕捉到第二个异常。

如果我在 netbeans 中右键单击 javadb 服务并选择连接,一切都会顺利进行。 [实际上,当我选择时知道java在后台运行什么代码或程序会很好]

在库下的项目列表中,我看到了 derby.jar、derbyclient.jar 和 derbynet.jar

我做错了什么?请帮忙!

这是我得到的错误

java.sql.SQLNonTransientConnectionException: The connection was refused because the database mydb was not found.
    at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
    at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
    at org.apache.derby.jdbc.ClientDriver.connect(Unknown Source)
    at java.sql.DriverManager.getConnection(DriverManager.java:579)
    at java.sql.DriverManager.getConnection(DriverManager.java:243)
    at mydb.MainGuiController.initialize(MainGuiController.java:105)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2152)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2028)
    at mydb.mydb.start(mydb.java:37)
    at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:319)
    at com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:215)
    at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:179)
    at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:176)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:176)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
    at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:73)
    at java.lang.Thread.run(Thread.java:722)
Caused by: org.apache.derby.client.am.DisconnectException: The connection was refused because the database mydb was not found.
    at org.apache.derby.client.net.NetConnectionReply.parseRDBNFNRM(Unknown Source)
    at org.apache.derby.client.net.NetConnectionReply.parseAccessRdbError(Unknown Source)
    at org.apache.derby.client.net.NetConnectionReply.parseACCRDBreply(Unknown Source)
    at org.apache.derby.client.net.NetConnectionReply.readAccessDatabase(Unknown Source)
    at org.apache.derby.client.net.NetConnection.readSecurityCheckAndAccessRdb(Unknown Source)
    at org.apache.derby.client.net.NetConnection.flowSecurityCheckAndAccessRdb(Unknown Source)
    at org.apache.derby.client.net.NetConnection.flowUSRIDPWDconnect(Unknown Source)
    at org.apache.derby.client.net.NetConnection.flowConnect(Unknown Source)
    at org.apache.derby.client.net.NetConnection.<init>(Unknown Source)
    at org.apache.derby.client.net.NetConnection40.<init>(Unknown Source)
    at org.apache.derby.client.net.ClientJDBCObjectFactoryImpl40.newNetConnection(Unknown Source)

【问题讨论】:

你只是在吞下异常!如果您不打算处理或“躲避”它,至少打印一个堆栈跟踪。一旦您获得堆栈跟踪但仍不确定发生了什么,请将其包含在您的问题中。 是的。我真傻。问题已编辑 【参考方案1】:

通过 JDBC url,看起来您正在尝试连接到 Derby 服务器而不是嵌入式实例。如果您尝试连接到服务器实例,请注意以下几点:

你自己启动服务器了吗,mydb 已经存在了吗? 如果没有,您是否传递了正确的参数来创建(例如 ;create=true) example: jdbc:derby://localhost:1527/dbname;create=true 如果 mydb 确实存在,您是否将服务器指向正确的位置? 此外,根据用于启动 derby 的内容(例如嵌入式驱动程序与网络驱动程序),默认数据库位置也不同。你可以阅读about it here

基本上你得到的例外是 Derby 说它找不到你的数据库 - 这基本上是一个路径问题。

【讨论】:

是的。傻傻的我!我忘了包含完整路径,因为我忘记了 windows 中的默认值在 C:/users/myUserName/.netbeans-derby/mydb【参考方案2】:

如果您使用的是 netbeans,您应该通过进入连接属性并添加一个属性来解决此问题。在“property”下输入“create”,在“value”下输入“true”。

【讨论】:

以上是关于连接到 Derby 网络服务器时找不到数据库错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 ODBC 从 Web 服务器连接到 MS Access 数据库时找不到数据源名称

尝试连接到 Mysql 数据库时找不到类 com.mysql.jdbc.Driver jdbc

使用 GWT 时找不到 Firebase Service Worker(404 错误)

使用 GWT 时找不到 Firebase Service Worker(404 错误)

使用 JDBC 连接到 Athena 时找不到合适的驱动程序

Derby 在 Java 应用程序中自动启动服务器并连接到数据库