दिलचस्प पोस्ट
हम जावा रेगेक्स के साथ ^ nb ^ n कैसे मेल कर सकते हैं? अगले एक को निष्पादित करने के बाद क्यों एआरएम पीसी रजिस्टर निर्देश को इंगित करता है? यूनिट एक multithreaded आवेदन का परीक्षण? कैसे एंड्रॉइड में सर्किल कस्टम प्रगति पट्टी बनाने के लिए कैसे एमवीवीएमएलईएल सरलआईओक का उपयोग करें? जावा SWT के साथ अमान्य थ्रेड एक्सेस त्रुटि बाश में हैश टेबल कैसे परिभाषित करें? अपेक्षित यदि कंडीशनल वैधीकरण विशेषता एक यूआरएल से विंडोज बैच फ़ाइल फाइल डाउनलोड करें कैसे .net कोड से संग्रहित प्रक्रिया के लिए तालिका मान पैरामीटर को पारित करने के लिए javascript / jquery में base64 को छवि में कनवर्ट करें सुडोकू वर्ग में बहिर्गमन के दोष कैसे निकालें? php तारीख सत्यापन एक अतिप्रवाह के बाहर बच्चे को दिखाई दे: छिपे हुए माता-पिता पैरामीटर के साथ अंतर। जोड़ें और पैरामीटर। AddWithValue

स्टेटमेंट के साथ तैयार किए गए स्टेटमेंट। RETURN_GENERATED_KEYS

एकमात्र तरीका है कि कुछ जेडीबीसी चालकों ने Statement.RETURN_GENERATED_KEYS वापस करने के लिए। REGREG_GENERATED_KEYS निम्न में से कुछ करना है:

 long key = -1L; Statement statement = connection.createStatement(); statement.executeUpdate(YOUR_SQL_HERE, Statement.RETURN_GENERATED_KEYS); ResultSet rs = statement.getGeneratedKeys(); if (rs != null && rs.next()) { key = rs.getLong(1); } 

PreparedStatement साथ ऐसा करने का एक तरीका है?


संपादित करें

मैंने पूछा कि क्या मैं PreparedStatement साथ ऐसा कर सकता हूँ, इस परिदृश्य पर विचार करें:

 private static final String SQL_CREATE = "INSERT INTO USER(FIRST_NAME, MIDDLE_NAME, LAST_NAME, EMAIL_ADDRESS, DOB) VALUES (?, ?, ?, ?, ?)"; 

USER तालिका में एक PRIMARY KEY (USER_ID) जो एक BIGINT AUTOINCREMENT (इसलिए आप इसे SQL_CREATE स्ट्रिंग में क्यों नहीं देखते हैं

अब, मैं आबाद हूं ? PreparedStatement.setXXXX(index, value) मैं ResultSet rs = PreparedStatement.getGeneratedKeys() वापस करना चाहता हूं। इसे कैसे प्राप्त किया जा सकता है?

वेब के समाधान से एकत्रित समाधान "स्टेटमेंट के साथ तैयार किए गए स्टेटमेंट। RETURN_GENERATED_KEYS"

आप एक अतिरिक्त int पैरामीटर लेने के लिए तैयार prepareStatement उपयोग कर सकते हैं

 PreparedStatement ps = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS) 

कुछ जेडीबीसी चालकों (उदाहरण के लिए, ओरेकल) के लिए आपको स्पष्ट रूप से जेनरेट किए गए कुंजियों के स्तंभ नामों या इंडेक्सों को सूचीबद्ध करना होगा:

 PreparedStatement ps = con.prepareStatement(sql, new String[]{"USER_ID"}) 

क्या आपका मतलब इस तरह की किसी चीज से है?

 long key = -1L; PreparedStatement preparedStatement = connection.prepareStatement(YOUR_SQL_HERE, PreparedStatement.RETURN_GENERATED_KEYS); preparedStatement.setXXX(index, VALUE); preparedStatement.executeUpdate(); ResultSet rs = preparedStatement.getGeneratedKeys(); if (rs.next()) { key = rs.getLong(1); } 

अभी मेरे द्वारा कंपाइलर नहीं होने पर, मैं एक प्रश्न पूछकर उत्तर दूंगा:

क्या आपने यह कोशिश की है? क्या यह काम करता है?

 long key = -1L; PreparedStatement statement = connection.prepareStatement(); statement.executeUpdate(YOUR_SQL_HERE, PreparedStatement.RETURN_GENERATED_KEYS); ResultSet rs = statement.getGeneratedKeys(); if (rs != null && rs.next()) { key = rs.getLong(1); } 

अस्वीकरण: जाहिर है, मैंने इसे संकलित नहीं किया है, लेकिन आपको यह विचार मिलता है।

तैयार किए गए स्टेटमेंट वक्तव्य का एक सबइंटरफेर है, इसलिए मुझे कोई कारण नहीं दिखता है कि यह क्यों काम नहीं करेगा, जब तक कि कुछ जेडीबीसी ड्राइवर बग़ीदार न हों।

 private void alarmEventInsert(DriveDetail driveDetail, String vehicleRegNo, int organizationId) { final String ALARM_EVENT_INS_SQL = "INSERT INTO alarm_event (event_code,param1,param2,org_id,created_time) VALUES (?,?,?,?,?)"; CachedConnection conn = JDatabaseManager.getConnection(); PreparedStatement ps = null; ResultSet generatedKeys = null; try { ps = conn.prepareStatement(ALARM_EVENT_INS_SQL, ps.RETURN_GENERATED_KEYS); ps.setInt(1, driveDetail.getEventCode()); ps.setString(2, vehicleRegNo); ps.setString(3, null); ps.setInt(4, organizationId); ps.setString(5, driveDetail.getCreateTime()); ps.execute(); generatedKeys = ps.getGeneratedKeys(); if (generatedKeys.next()) { driveDetail.setStopDuration(generatedKeys.getInt(1)); } } catch (SQLException e) { e.printStackTrace(); logger.error("Error inserting into alarm_event : {}", e .getMessage()); logger.info(ps.toString()); } finally { if (ps != null) { try { if (ps != null) ps.close(); } catch (SQLException e) { logger.error("Error closing prepared statements : {}", e .getMessage()); } } } JDatabaseManager.freeConnection(conn); } 
 String query = "INSERT INTO ...."; PreparedStatement preparedStatement = connection.prepareStatement(query, PreparedStatement.RETURN_GENERATED_KEYS); preparedStatement.setXXX(1, VALUE); preparedStatement.setXXX(2, VALUE); .... preparedStatement.executeUpdate(); ResultSet rs = preparedStatement.getGeneratedKeys(); int key = rs.next() ? rs.getInt(1) : 0; if(key!=0){ System.out.println("Generated key="+key); }