2017-07-05 171 views
0

我想将derby DB连接到Java应用程序。我已经下载了所有的罐子,设置类路径作为Java目录,并下载Derby.What我得到现在是:java derby连接到服务器本地主机的错误1527

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

} 

回答

2

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

ClientDriver用于客户机/服务器模式(这可以作为一个传统的关系数据库管理系统),所以你需要启动Derby数据库服务器为不同的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。 请参阅this example,在中进行了解释练习3:使用Getting Started with Derby指南的嵌入式驱动程序运行JDBC程序。 请注意,在嵌入模式下,为了在退出JVM之前正确关闭数据库,必须执行一些附加步骤。

相关问题