2017-07-05 108 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之前正確關閉數據庫,必須執行一些附加步驟。

相關問題