जेडीबीसी (ओरेकल) का उपयोग करके मुझे दो टेबलों में से प्रत्येक में हजार पंक्तियों को सम्मिलित करने की आवश्यकता है। कुछ ऐसा:जावा जेडीबीसी - एकाधिक तैयार कथन थोक सम्मिलित
"INSERT INTO TABLE_A (A_ID, A_NAME, A_LAST_NAME) VALUES (MY_SEQUENCE.NEXTVAL, ?, ?)";
"INSERT INTO TABLE_B (B_ID, B_DESCRIPTION) VALUES (MY_SEQUENCE.CURRVAL, ?)";
समस्या यह है कि दोनों टेबल सामान्य अनुक्रम के माध्यम से जुड़े हुए हैं, ताकि कथन का क्रम महत्वपूर्ण हो।
यदि मेरे पास केवल एक टेबल थी तो यह काफी आसान होगा। उस मामले में मैं कोड का इस्तेमाल किया:
String insert = "Insert into TABLE_A(A_ID, A_NAME, A_LAST_NAME) values(MY_SEQUENCE.NEXTVAL, ?, ?)";
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement(insert);
for(MyObject obj : myCollection) {
ps.setString(1, obj.getName());
ps.setString(2, obj.getLastName());
ps.addBatch();
}
ps.executeBatch();
conn.commit();
ps.close();
लेकिन इस दृष्टिकोण इस प्रकार केवल एक सम्मिलित के साथ केवल एक तैयार बयान के साथ काम करते हैं और कर सकते हैं। मैं इस समस्या के लिए समाधान कैसे प्रदान कर सकता हूं?
आंशिक रूप से आप सही कह रहे हैं, लेकिन और अधिक जटिल समस्या एक और के बारे में 1000 बार के बाद जावा में दोनों डालने बयान निष्पादित करने के लिए प्रयास कर सकते हैं ताकि एक में प्रत्येक पंक्ति तालिका एक पंक्ति में एक पंक्ति के अनुरूप होगी (ए_आईडी = बी_आईडी)। यदि यह केवल एक डालने वाला था, तो हम एडबैच() का उपयोग कर सकते हैं जैसा कि मैंने उदाहरण में दिखाया है और इससे प्रदर्शन में वृद्धि होगी। लेकिन ऐसा लगता है कि जावा में दो तैयार बयान के साथ यह संभव नहीं है, और इससे प्रदर्शन की समस्याएं हो सकती हैं। – agav
यदि आप मेरे छद्म कोड से "currentNextVal" का उपयोग करते हैं, तो आप इसे प्राप्त करेंगे। आपको इसे बैच में करने की ज़रूरत नहीं है, हालांकि आप इसे 2 बैचों में कर सकते हैं ... – IncrediApp