2012-11-30 9 views
11

मैं एक PreparedStatement का उपयोग कर INSERT कई पंक्तियों हैं: इस बिंदु परgetGeneratedKeys() के बाद PreparedStatement.executeBatch()

ps = con.prepareStatement(query,PreparedStatement.RETURN_GENERATED_KEYS); 

for(Element e:listOfElements){ 
    ps.setString(1,this.col_val_1); 
    ps.setString(2,this.col_val_2); 
    ps.setInt(3,this.col_val_3); 

    ps.addBatch(); 
} 

ps.executeBatch(); 
ResultSet rs = ps.getGeneratedKeys(); 

, whent मैं पी के एक-INSERT के लिए उत्पन्न, मैं इस SQLServerException प्राप्त प्राप्त करने की उम्मीद:

com.microsoft.sqlserver.jdbc.SQLServerException: The statement must be executed before any results can be obtained. 

मैं प्रदर्शन प्रत्येक डालने के लिए एक पंक्ति के साथ एक ResultSet मिलने की संभावना है, इसलिए मैं प्रत्येक पी उत्पन्न हो सकता है।

मैं गलत उम्मीद कर रहा हूं? क्या मुझसे कुछ गलत हो रही है? बैच निष्पादन का उपयोग कर इसे अलग तरीके से किया जा सकता है? getGeneratedKeys() बैच निष्पादन पर के लिए

+0

transaction'ed है किसी भी संयोग से 'INSERT's? –

+0

यदि आप पूछते हैं कि 'INSERT की सफलतापूर्वक निष्पादित की गई है, हाँ। समस्या तब होती है जब मैं अपनी चाबियाँ पुनर्प्राप्त करना चाहता हूं। – jmrodrigg

+0

मेरा मतलब है कि बैच इससे पहले कि आप उत्पन्न कुंजियों को प्राप्त कर सकते हैं 'होना प्रतिबद्ध करने के लिए एड आवश्यकता हो सकती है()' '। –

उत्तर

8

समर्थन कार्यान्वयन JDBC कल्पना के अनुसार परिभाषित किया गया है। सबसे अधिक संभावना है कि SQL सर्वर ड्राइवर बैच निष्पादन के लिए इसका समर्थन नहीं करता है।

मैं माइक्रोसॉफ्ट की साइट पर एक स्पष्ट बयान देखने के लिए करने की कोशिश की है, लेकिन यह नहीं मिल सका। एमएसडीएन पर यह पुराना (2007) फोरम पोस्ट यह बताता है कि यह समर्थित नहीं है: http://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/6cbf5eea-e5b9-4519-8e86-f4b65ce3f8e1

+0

कि वास्तव में क्या होता है: मैं 'में एक' पूर्णांक [] '' चर executeBatch का परिणाम हो रही है() द्वारा प्रत्येक 'INSERT' के परिणाम देख सकते हैं, लेकिन मैं यह भी आदेश में लॉग इन करने डाला कुंजी प्राप्त करना चाहता था उन्हें। – jmrodrigg

+1

स्पष्ट करने के लिए धन्यवाद, मैं किसी भी स्पष्ट बयान यह समर्थित नहीं है (मैं अपने संदेह था, लेकिन मुझे यकीन है कि नहीं था) नहीं मिला। – jmrodrigg

+2

माइक्रोसॉफ्ट पर एसक्यूएल सर्वर JDBC ड्राइवर टीम के रूप में इस की पहचान की है एक [ भावी रिलीज के लिए फीचर अनुरोध] (https://github.com/Microsoft/mssql-jdbc/issues/245)। –

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