java derby连接到服务器localhost 1527时出错

时间:2017-07-05 14:38:04

标签: java sql database apache derby

我想将derby DB连接到Java应用程序。我已经下载了所有的jar,将类路径设置为java目录并下载了Derby。我现在得到的是:

java.sql.SQLNonTransientConnectionException: java.net.ConnectException : Error connecting to server localhost on port 1527 with message Connection refused: connect.

任何人都可以帮助我:它实际意味着什么,我现在能做什么?我猜可能有一个Database_url变量有问题,但我不知道如何正确设置它。

private static final String protocol = "jdbc:derby:";

public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, SQLException {
    final String DATABASE_URL = "jdbc:derby://localhost:1527/myDB;create=true;user=user;password=pass";
    try {
        Class.forName("org.apache.derby.jdbc.ClientDriver");
        System.out.println("Loaded the client driver.");
    } catch (Exception err) {
        System.err.println("Unable to load the client driver.");
        err.printStackTrace(System.err);
        System.exit(0);
    }
    String dbName = "BookDatabase";
    Connection conn = null;
    try {
        System.out.println(
                "Connecting to and creating the database...");
        conn = DriverManager.getConnection(DATABASE_URL);
        System.out.println("Database created.");
        Statement s = (Statement) conn.createStatement();
        s.execute("CREATE TABLE names" +
                "(author varchar(50), author_id " +
                "int, url varchar(80))");
        System.out.println("Created 'names' table.");
        System.out.println("Inserting authors.");
        s.execute("INSERT INTO names " +
                "VALUES ('Adams, Douglas', 1," +
                "'http://www.douglasadams.com')");
        s.execute("INSERT INTO names " +
                "VALUES ('Simmons, Dan', 2, 'http://www.dansimmons.com')");
        s.execute("INSERT INTO names " +
                "VALUES ('Stephenson, Neal', 3, " +
                "'http://www.nealstephenson.com')");
        System.out.println("Authors inserted.");
        conn.close();
    } catch (SQLException err) {
        System.err.println("SQL error.");
        err.printStackTrace(System.err);
        System.exit(0);
    }

}

1 个答案:

答案 0 :(得分:2)

鉴于您的错误(连接被拒绝:连接),似乎数据库服务器尚未启动。 Apache Derby有两种操作模式:客户端/服务器和嵌入式。每种模式使用不同的驱动程序(并具有不同的JDBC URL语法)。

ClientDriver用于客户端/服务器模式(作为传统的RDMS),因此您需要将Derby DB Server作为不同的Java进程启动:

java -cp derby.jar;derbynet.jar;derbyclient.jar;derbytools.jar org.apache.derby.drda.NetworkServerControl start 

(和java ... NetworkServerControl stop以关闭数据库进程)。

另一种方法是在嵌入模式下启动数据库(数据库和客户端都在同一个JVM中运行,但其他进程不能同时连接到数据库)。

嵌入模式使用org.apache.derby.jdbc.EmbeddedDriver,数据源URL的格式为jdbc:derby:firstdb;create=true。 请参阅{{3>},<{3>}指南的活动3:使用嵌入式驱动程序运行JDBC程序中对此进行了解释。 请注意,在嵌入模式下,必须执行一些额外的步骤才能在退出JVM之前正确关闭数据库。