से स्टेल डेटा लौटा रही है, मैं एक उत्तर के लिए स्टैक ओवरफ्लो खोज रहा हूं लेकिन ऐसा लगता है कि इसमें हाइबरनेट या कुछ अन्य डेटाबेस रैपर शामिल नहीं हैं।जावा MYSQL/JDBC क्वेरी कैश्ड कनेक्शन
मैं जेएमबीसी का उपयोग सीधे टॉमकैट 6 जावा ईई ऐप में MYSQL 5.18 जेडीबीसी ड्राइवर के माध्यम से कर रहा हूं। मैं कनेक्शन ऑब्जेक्ट्स कैशिंग कर रहा हूं, लेकिन वक्तव्य ऑब्जेक्ट्स कैशिंग नहीं कर रहा हूं। क्वेरी के लिए परिणामसेट्स पहले रन पर डेटा डेटा को सही तरीके से लौट रहे हैं। जब मैं PHPMyAdmin या किसी अन्य बाहरी उपकरण के माध्यम से कुछ पंक्तियों को बदलता हूं, तो क्वेरी को दोबारा शुरू करें, मुझे पुराना डेटा पुराना मिलता है।
मैं सामान्य स्टेटमेंट का उपयोग कर रहा हूं, तैयार किए गए स्टेटमेंट्स नहीं। मैंने ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE का प्रयास किया है। मैं परिणाम सेट को भी बंद कर रहा हूं। ये समस्या का समाधान नहीं करते हैं। मैंने ResultSet.refreshRows() का भी प्रयास किया है, लेकिन इसके परिणामस्वरूप त्रुटि हुई है क्योंकि क्वेरी में जॉइन क्लॉज है।
एकमात्र चीज जो स्पष्ट रूप से समस्या हल करती है कनेक्शन को बंद कर रही है और डेटाबेस से पुनः कनेक्ट कर रही है, जिसके परिणामस्वरूप प्रत्येक क्वेरी प्रयास के लिए भारी लागत होती है।
क्या स्टेल डेटा लौटाए बिना कनेक्शन का पुन: उपयोग करने का कोई तरीका है?
संपादित करें: मैं इस समय प्रश्नों के लिए लेनदेन का उपयोग नहीं कर रहा हूं।
यहां सामान्य कोड है।
Connection conn; //created elsewhere and reused
...
String query = "SELECT p.ID as oid,rid,handle,summary,city,state,zip,t.name AS category
FROM profiles AS p
JOIN (terms AS t) ON (p.tid = t.ID)
WHERE p.ID = 1";
ResultSet resultSet;
Statement s;
synchronized (conn)
{
s = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
resultSet = s.executeQuery(query);
}
//Iterate over the results using .next() and copy data to another data structure
List retval = getResults(resultSet);
s.close();
अग्रिम सहायता के लिए धन्यवाद!
क्या आप लेनदेन का उपयोग कर रहे हैं? यदि ऐसा है तो अलगाव स्तर क्या है? ऐसा लगता है कि रीपेटेबल रीड व्यवहार की तरह थोड़ा सा लगता है। –
अच्छा सवाल। इन प्रश्नों के लिए कोई लेनदेन नहीं।मैं सामान्य रूप से अपडेट/आवेषण के लिए लेनदेन का उपयोग करता हूं, लेकिन इस विशेष मामले में मैं अभी भी ऐप के भीतर किसी को निष्पादित नहीं कर रहा हूं। मैं एक बाहरी उपकरण के माध्यम से अद्यतन कर रहा हूं जो चीजों को फेंक सकता है। यदि आप गंदे पढ़ने को रोकने के लिए समाधान के रूप में लेनदेन की अनुशंसा करते हैं, तो कृपया एक उत्तर साझा करें। इसके अलावा, मैंने कनेक्शन पर कोई अलगाव स्तर निर्धारित नहीं किया है। क्या यह समस्या होगी? – ricosrealm