मैं एक एक्सेस डेटाबेस जोड़ तोड़ के लिए UCanAccess उपयोग कर रहा हूँ अक्षम करता है।UCanAccess/Jackcess अपवाद है जब executeUpdate बुला मेरी लॉगर आउटपुट
net.ucanaccess.jdbc.UcanaccessSQLException: जब
executeUpdate
बुला मैं अपवाद UCAExc ::: 3.0.2 अप्रत्याशित पेज टाइप 1 (; तालिका = MyTable; Db = db.accdb सूचकांक = PrimaryKey)
यह केवल तब होता है जब एक विशेष पंक्ति को अद्यतन करने की कोशिश कर रहा - मैं पहले से ही जानते हैं कि कैसे पहुँच DB में इसे ठीक करने के। के बाद इस अपवाद फेंक दिया है
समस्या, लॉगर के साथ है और मैं इसे पकड़ने, मैं एक जानकारी संदेश लॉग इन करें और यह नहीं दिखाया गया है, अगले लॉग संदेशों के सभी या तो नहीं दिखाए जाते।
डीबी को ठीक किए बिना मैं इसे ठीक करना क्यों चाहता हूं क्योंकि जब यह एक बार होता है, तो उपयोगकर्ता को अगले कार्यों को लॉग इन करने के लिए एप्लिकेशन को बंद करना चाहिए, अगर वह नहीं जानता तो मैं नहीं जानता उसने क्या किया।
public static void main(String args[]) {
Logger logger = Logger.getLogger("myLogger");
PreparedStatement pst = null;
try {
FileHandler fileHandler = new FileHandler("myLog.log", 0, 1, true);
// Set formatter to put the time, the message, and the exception if exists
fileHandler.setFormatter(new Formatter() {
@Override
public String format(LogRecord record) {
Throwable t = record.getThrown();
String stackTrace = "";
if (t != null) {
StringWriter sw = new StringWriter();
t.printStackTrace(new PrintWriter(sw));
stackTrace = sw.toString();
}
return Calendar.getInstance().getTime() + "--" +
formatMessage(record) + stackTrace + "\n";
}
});
// Set the logger handler
logger.addHandler(fileHandler);
logger.log(Level.INFO, "1");
// Throw on purpose
String query = "UPDATE myTable SET name = 'a' WHERE id = 289";
conn = DriverManager.getConnection(DB_URL);
pst = conn.prepareStatement(query);
pst.executeUpdate();
logger.log(Level.INFO, "2");
} catch (UcanaccessSQLException e) {
logger.log(Level.INFO, "3");
System.out.println("INSIDE Exception");
} catch (SQLException e) {
logger.log(Level.INFO, "4");
} catch (Exception e) {
logger.log(Level.INFO, "5");
}
}
कंसोल आउटपुट है:
net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc ::: 3.0.2 अप्रत्याशित पेज टाइप 1 (Db = db
यह मेरा कोड है .accdb; तालिका = myTable; अनुक्रमणिका = प्राथमिक कुंजी) net.ucanaccess.commands.CompositeCommand.persistist (CompositeCommand.java:95) net.ucanaccess.jdbc.UcanaccessConnection.flushIO (UcanaccessConnection.java:315) पर नेट पर .ucanaccess.jdbc.UcanaccessConnection.commit (Ucanacce ssConnection.java:205) net.ucanaccess.jdbc.AbstractExecute.executeBase (AbstractExecute.java:161) पर net.ucanaccess.jdbc.ExecuteUpdate.execute (ExecuteUpdate.java:50) net.ucanaccess.jdbc पर पर। UcanaccessPreparedStatement.executeUpdate (UcanaccessPreparedStatement.java:253) rashi.NewClass.main (NewClass.java:61) के कारण: java.io.IOException: अप्रत्याशित पृष्ठ प्रकार 1 (डीबी = डीबी.एसीसीडीबी; तालिका = myTable; इंडेक्स = PrimaryKey) com.healthmarketscience.jackcess.impl.IndexData.isLeafPage (IndexData.java:1185) com.healthmarketscience.jackcess.impl.IndexData.readDataPage (IndexData.java:1067) com.healthmarketscience.jackcess पर .impl.IndexPageCache.readDataPage (IndexPageCache.java:267) com.healthmarketscience.jac पर kcess.impl.IndexPageCache.getDataPage (IndexPageCache.java 2424) com.healthmarketscience.jackcess.impl.IndexPageCache.getCacheDataPage (IndexPageCache.java2111) ..............
परअंदर अपवाद
और मेरी लॉग फ़ाइल केवल इस पंक्ति में शामिल हैं:
Sun Dec 20 15:35:40 IST 2015--1
जिसका अर्थ है मेरी लकड़हारा अब सक्रिय नहीं है। मुझे लगता है कि UCanAccess में अपवाद से पहले कुछ लकड़हारा परिवर्तन होते हैं।
अपने वास्तविक कार्यक्रम में, लकड़हारा स्थिर अंतिम घोषित ऐसी है कि वह कचरा एकत्र नहीं किया जा सकता है? – jmehrens
मेरे वास्तविक कार्यक्रम में स्थिर अंतिम लॉगर होता है। मैंने उस अपवाद के साथ एक्सेस डीबी फ़ाइल बनाई है, मैं इसे बाद में अपलोड कर दूंगा। इस बीच, किसी अन्य कॉम्पैक्ट डेटाबेस का उपयोग करने के लिए कोई सुझाव, जिसमें कोड में बड़े बदलाव की आवश्यकता नहीं होगी? मैं नहीं चाहता कि ये त्रुटियां तब आती हैं जब आवेदन उत्पादन में हो (क्योंकि मैंने "कॉम्पैक्ट और मरम्मत" करने की कोशिश की और कई पंक्तियां हटा दी गई हैं)। –
मैं एक (क्षतिग्रस्त) .mdb फ़ाइल बनाने में कामयाब रहा जो आपकी समस्या को दोबारा शुरू करता है और इसे यूसीएएनएप विकास टीम को रिपोर्ट करता है। –