简体   繁体   English

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

[英]Database not found error when connecting to Derby network server

I'm having problems initializing my javadb network server and setting a connection to it. 我在初始化我的javadb网络服务器并设置连接时遇到问题。 It's a JavaFX program. 这是一个JavaFX程序。

This is what I have so far: 这是我到目前为止:

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);
    }

I always catch the second exception. 我总是抓住第二个例外。

If I right click on the javadb service in netbeans and choose connect, everything runs smoothly. 如果我右键单击netbeans中的javadb服务并选择connect,一切运行顺利。 [Actually it'd be nice to know what code or program java runs in the background when I select that] [实际上,当我选择那个时,知道java在后台运行什么代码或程序会很好]

In my projects list under libraries I see derby.jar, derbyclient.jar and derbynet.jar 在库下的项目列表中,我看到了derby.jar,derbyclient.jar和derbynet.jar

What am I doing wrong? 我究竟做错了什么? Please help! 请帮忙!

Here's the error I get 这是我得到的错误

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)

By the JDBC url, it's looks like you're trying to connect to a Derby server vs. an embedded instance. 通过JDBC URL,看起来您正在尝试连接到Derby服务器而不是嵌入式实例。 If you are trying to connect to a server instance, here are some considerations: 如果您尝试连接到服务器实例,请注意以下事项:

  • did you start the server yourself, did mydb already exists? 你自己启动服务器,mydb已经存在吗?
  • if not, did you pass in the correct params to create (eg ;create=true) example: jdbc:derby://localhost:1527/dbname;create=true 如果没有,你是否传递了正确的参数来创建(例如; create = true) example: jdbc:derby://localhost:1527/dbname;create=true
  • if mydb did exists, are you pointing the server to the correct location? 如果mydb确实存在,你是否将服务器指向正确的位置?
    • also, depending on what was used to start derby (eg embedded vs network driver) default database locations are different as well. 另外,根据用于启动derby的内容(例如嵌入式vs网络驱动程序),默认数据库位置也不同。 You can read about it here 你可以在这里阅读

Basically the exception you're getting is that Derby's saying it can't find your database - it's basically a path issue. 基本上你得到的例外是Derby说它无法找到你的数据库 - 它基本上是一个路径问题。

If you're using netbeans, you should fix this by going into the connection properties and adding a property. 如果您正在使用netbeans,则应通过进入连接属性并添加属性来解决此问题。 Under "property" type "create" and under "value" type "true". 在“property”下输入“create”,在“value”下输入“true”。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM