2010-06-22 7 views
6

मुझे अपने जावा कोड से SQL सर्वर डेटाबेस (एक समय में 100) में एकाधिक पंक्तियां डालने की आवश्यकता है। मैं यह कैसे कर सकता हूँ? वर्तमान में मैं एक करके एक डालने वाला हूं और यह कुशल नहीं दिखता है।जावा से SQL सर्वर में एकाधिक पंक्ति डालने

उत्तर

14

आप इसे चलाने के लिए बैच और executeBatch() बनाने के लिए PreparedStatement#addBatch() का उपयोग कर सकते हैं।

Connection connection = null; 
PreparedStatement statement = null; 
try { 
    connection = database.getConnection(); 
    statement = connection.prepareStatement(SQL); 
    for (int i = 0; i < items.size(); i++) { 
     Item item = items.get(i); 
     statement.setString(1, item.getSomeValue()); 
     // ... 
     statement.addBatch(); 
     if ((i + 1) % 100 == 0) { 
      statement.executeBatch(); // Execute every 100 items. 
     } 
    } 
    statement.executeBatch(); 
} finally { 
    if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {} 
    if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {} 
} 

भी देखें:

+0

इस दृष्टिकोण में यदि बैच से एक रिकॉर्ड विफल हो जाता है तो क्या होगा ..? असफल रिकॉर्ड के बाद रिकॉर्ड डाले जाएंगे ... मैं कैसे सुनिश्चित कर सकता हूं कि रिकॉर्ड को छोड़कर जो अन्य सभी रिकॉर्ड विफल हो जाए ...? – Kaddy

+1

वह वास्तव में इस्तेमाल किए गए ड्राइवर पर निर्भर करता है। ['ExecuteBatch()' javadoc] देखें (http://java.sun.com/javase/6/docs/api/java/sql/Statement.html#executeBatch%28%29)। – BalusC

2

बैच का उपयोग करें।

बाहर चेक addBatch(), executeBatch(), आदि एक सरल उदाहरण, जाँच here के लिए जावा के Statement

के तरीकों (लेकिन मैं एक PreparedStatement का उपयोग कर सुझाव है)

+0

वहाँ एसक्यूएल सर्वर में एक बैच बयान है या मैं एक एपीआई का उपयोग करने की आवश्यकता है ...? – Kaddy

+0

@ कैडी - मैं इसे तैयार किए गए स्टेटमेंट – froadie

1

आप एक बहुत पारित कर सकते हैं SQL सर्वर पर एक कथन के रूप में एकाधिक प्रविष्टियों के साथ SQL के लिए लंबी स्ट्रिंग। यदि आप पैरामीटरयुक्त प्रश्न कर रहे हैं, तो यह काम नहीं करेगा। और समेकित एसक्यूएल तार "आम तौर पर एक बुरा विचार है।"

आप BULK INSERT कमांड को देखकर बेहतर हो सकते हैं। कॉलम ऑर्डर और इस तरह के बारे में कठोर होने की समस्या है। लेकिन इसके रास्ते तेजी से !!

+0

का उपयोग करके बैच के साथ जावा पक्ष पर करने की सलाह दूंगा क्योंकि मैं इसका उपयोग नहीं कर सकता क्योंकि मेरे पास फ़ाइल नहीं है ... धन्यवाद ... – Kaddy

+0

हाँ, यह फ़ाइल लिखने के लिए एक पिटा है और ऐसे, लेकिन इसके बारे में जागरूक होने के लिए यह एक अच्छा आदेश है। :) –

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