2011-05-18 15 views
7

को हटा नहीं देता है, मैं डिफ़ॉल्ट पोर्ट के साथ अपने जावा एप्लिकेशन से नेटवर्क सर्वर मोड में डर्बी शुरू करने का प्रयास कर रहा हूं। सर्वर सफलतापूर्वक शुरू होता है। अब मैं सर्वर पर 'myDB' नामक डीबी से कनेक्ट करने का प्रयास करता हूं। कनेक्शन स्थापित है और db.lck सफलतापूर्वक बनाया गया है। मैं, फिर, कुछ लेनदेन करता हूं, कनेक्शन को प्रतिबद्ध और बंद करता हूं। मैं देखता हूं कि db.lck अभी भी वहां है। फिर मैंने नेटवर्क सर्वर को बंद कर दिया। मुझे उम्मीद है कि इन सभी परिचालनों के अंत में db.lck फ़ाइल हटा दी जाएगी। लेकिन यह रहता है।डर्बी नेटवर्क सर्वर को बंद करना 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)

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

कोई भी कर सकता है ई कृपया इसके साथ मेरी मदद करें? जब मैं कनेक्शन बंद करता हूं या डीबी बंद करता हूं तो मुझे हटाए जाने के लिए db.lck फ़ाइल की आवश्यकता होती है। मुझे लगता है कि मुझे कुछ याद आ रही है। अग्रिम में धन्यवाद।

उत्तर

2

शायद सर्वर को बंद करना डेटाबेस को बंद नहीं कर रहा है; सर्वर को बंद करने से पहले एक स्पष्ट डेटाबेस शट डाउन करने का प्रयास करें, जैसा कि यहां बताया गया है: http://db.apache.org/derby/docs/10.8/devguide/tdevdvlp40464.html#tdevdvlp40464

+0

उत्तर के लिए धन्यवाद। मुझे लगता है कि यूआरएल में उल्लिखित डेटाबेस को बंद करने की विधि पूरी तरह से एक एम्बेडेड डर्बी के लिए है, न कि नेटवर्क सर्वर के लिए। मैंने नेटवर्क सर्वर के साथ ऐसा करने की कोशिश की (यानी, यूआरएल में संलग्न "; shutdown = true" के साथ getConnection को कॉल करना)। मैंने रूट कारण के रूप में निम्न के साथ SQLNonTransientConnectionException को दबाया: कारण: org.apache.derby.client.am.SqlException DERBY SQL त्रुटि: SQLCODE: -1, SQLSTATE: 08006, SQLERRMC: डेटाबेस 'myDB' शटडाउन। –

+1

लेकिन हां, इस मामले में लॉक फ़ाइल हटा दी गई थी। कोई विचार यह क्यों अपवाद फेंकता है? –

+2

यह वैसे ही डर्बी व्यवहार करता है। डेटाबेस को बंद करना अपवाद फेंकता है। यह थोड़ा अजीब है, लेकिन SQLSTATE बहुत पहचान योग्य है इसलिए मैं आपको बस उस अपवाद को पकड़ने और अनदेखा करने की सलाह देता हूं। –

संबंधित मुद्दे