7
我想從我的Java應用程序以默認端口在網絡服務器模式下啓動Derby。服務器啓動成功。現在我嘗試連接到服務器上的一個名爲'myDB'的數據庫。連接建立並且db.lck被成功創建。然後,我做一些事務,優雅地提交併關閉連接。我看到db.lck仍然存在。然後關閉網絡服務器。我希望在所有這些操作結束時刪除db.lck文件。但它仍然存在。 (PS:操作系統是Windows)關閉derby網絡服務器不刪除db.lck
以下是代碼:
1)啓動服務器:
System.setProperty("derby.system.home", "C:\\SI\\testDerby");
System.setProperty("derby.drda.traceDirectory", "C:\\SI\\trace");
System.setProperty("derby.drda.traceAll", "true");
System.setProperty("derby.drda.logConnections", "true");
System.setProperty("derby.connection.requireAuthentication", "false");
serverHandle = new NetworkServerControl();
// Write server console messages to system output
serverHandle.start(new PrintWriter(System.out));
2)連接到DB
final String PORT = 1527;
String driver = "org.apache.derby.jdbc.ClientDriver";
String dbName = "myDB";
String connectionURL = "jdbc:derby:" + "//localhost:"
+ PORT + "/" + dbName + ";create=true";
Class.forName(driver).newInstance();
Connection conn = DriverManager.getConnection(connectionURL);
Statement stmt = conn.createStatement();
boolean success = stmt.execute("DROP TABLE USERS");
PreparedStatement statement = conn.prepareStatement("CREATE TABLE USERS (id BIGINT not null, name VARCHAR(20))");
success = statement.execute();
conn.commit();
conn.close();
3)關閉服務器
serverHandle.shutdown();
Can anyon請幫我解決這個問題嗎?當我關閉連接或關閉數據庫時,我需要刪除db.lck文件。我想我錯過了一些東西。提前致謝。
感謝您的回覆。我認爲關閉URL中提到的數據庫的方法僅適用於嵌入式德比而不適用於網絡服務器。我嘗試了與網絡服務器相同的方式(即,在URL中附加了「; shutdown = true」的getConnection)。我以一個SQLNonTransientConnectionException作爲根本原因: 引起:org.apache.derby.client.am.SqlException DERBY SQL錯誤:SQLCODE:-1,SQLSTATE:08006,SQLERRMC:數據庫'myDB'關閉。 – 2011-05-19 04:53:12
但是,在這種情況下,鎖文件被刪除。任何想法爲什麼它在這裏拋出異常? – 2011-05-19 04:54:48
這就是德比的行爲方式。關閉數據庫會引發異常。這有點尷尬,但SQLSTATE非常可識別,所以我建議你簡單地捕捉並忽略該異常。 – 2011-05-19 21:47:14