2011-04-01 14 views
28

इस प्रश्न का उत्तर इस तरह से किया गया इंटरनेट पर खोजने में बहुत मुश्किल लगता है। मूल रूप से मैं preparedStatement का उपयोग कर एक MySQL डेटाबेस में मान डाल रहा हूँ। मैं एसक्यूएल इंजेक्शन हमलों को रोकने के लिए डेटा से बचने के लिए प्रीपेयरस्टेटमेंट का उपयोग करता हूं। समस्या यह है कि अब उन चाबियों को पुनः प्राप्त करने का तरीका है।जावा तैयार किए गए स्टेटमेंट को अंतिम डाला गया आईडी

String query="Insert INTO Table_A(name, age) (?, ?)"; 
//String query="Insert INTO Table_A(name, age) ('abc','123')";//Doesn't escape 
PreparedStatement prest; 
prest = con.prepareStatement(query); 
prest.setString(1,"abc"); 
prest.setInt(2,123); 
prest.executeUpdate(); 
//prest.executeUpdate(query, PreparedStatement.RETURN_GENERATED_KEYS); Throws an error 
//prest.executeQuery(); Throws an error 

तो मैं इनपुट से कैसे बच सकता हूं और जावा में तैयार किए गए स्टेटमेंट का उपयोग कैसे कर सकता हूं?

+1

'prepareStatement()' कॉल करने के लिए 'RETURN_GENERATED_KEYS' दर्रा और प्रयोग' executeUpdate() 'डालने exeute करने के लिए। यदि यह काम नहीं करता है, तो कृपया अपवाद प्रदान करें। – ZeissS

+0

@ बाल्लूसी इसे करने का एक सही तरीका संदर्भित करता है। –

+0

@ बाल्लूसी, यह वही है जो मैं ढूंढ रहा था। बुरा जवाब देने के लिए जवाब नहीं! –

उत्तर

1

आप RETURN_GENERATED_KEYS उपयोग नहीं कर सकते हैं, तो एक और बयान (एक प्रश्न इस समय) का उपयोग करने के लिए

SELECT last_insert_id() 

यह सुनिश्चित करें कि आप निश्चित रूप से उस तालिका में एक स्वत: वेतन वृद्धि प्राथमिक कुंजी स्तंभ किया हुआ है।

+0

क्या यह इस स्थिति के लिए भी काम करता है कि एक ही टेबल पर एकाधिक प्रविष्टियां थीं जिन्हें आप एक आवेषण के लिए आईडी प्राप्त करने का प्रयास कर रहे हैं? – user917099

52

Statement.RETURN_GENERATED_KEYSprepareStatement() में अपनी क्वेरी के साथ पास करें। और फिर अपने डाले गए auto_incremented_id युक्त परिणामसेट प्राप्त करने के लिए PreparedStatement के GetGeneratedKeys() का उपयोग करें।

String query="Insert INTO Table_A(name, age) (?, ?)"; 
       //String query="Insert INTO Table_A(name, age) ('abc','123')";//Doesn't escape 
       PreparedStatement prest; 
       prest = con.prepareStatement(query, Statement.RETURN_GENERATED_KEYS); 
       prest.setString(1,"abc"); 
       prest.setInt(2,123); 
       prest.executeUpdate(); 
       //prest.executeUpdate(query, PreparedStatement.RETURN_GENERATED_KEYS); Throws an error 
       //prest.executeQuery(); Throws an error 
       ResultSet rs = prest.getGeneratedKeys(); 
       if(rs.next()) 
       { 
        int last_inserted_id = rs.getInt(1); 
       } 

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

  • कोई संबंधित समस्या नहीं^_^