sql - Finding Auto Incremented values from an INSERT OR IGNORE statement in SQLite -


मेरे पास "चित्र" नामक एक टेबल है:

  बनाओ टेबल इमेजेस (id INTEGER PRIMARY कुंजी ऑटोट्रिंक्रम, यूआरएल पाठ नल अद्वितीय, कैप्शन पाठ);  

एक पंक्ति डालने पर, मुझे URL कॉलम अद्वितीय होना चाहिए उसी समय, मैं उस URL के साथ पंक्ति का आईडी खोजना चाहता हूं।

  INSERT या IGNORE छवियां (यूआरएल, कैप्शन) मूल्य ("http://stackoverflow.com "," एक लोगो "); SELECT last_insert_rowid (); - आईडी iff एक सम्मिलन था वापस देता है।  

बेशक, मैं इसे जितनी जल्दी संभव करना चाहता हूं, हालांकि मेरा पहला विचार निम्नलिखित छद्म कोड की तर्ज पर था:

  इंट ईल्डआईडी = एम्पस SQL ​​("SELECT last_insert_rowid ()"); ExecSQL ("INSERT या IGNORE छवियां (यूआरएल, कैप्शन) वैल्यू ('http://stackoverflow.com', 'ए लोगो')"); Int newID = execSQL ("SELECT last_insert_rowid ()"); अगर (newID! = OldID) {// एक सम्मिलित था नया आईडी वापसी; } Else {// हम पहले ही यूआरएल execSQL वापस करने से पहले यह यूआरएल ("SELECT id FROM images WHERE url = 'http://stackoverflow.com'); }  

लेकिन यह नासमझ अक्षम लगता है।

INSERT या IGNORE कथन से ऑटो वृद्धिशील पंक्ति आईडी प्राप्त करने का सबसे शानदार तरीका क्या है।

एंड्रॉइड 2.2 में आप SQLiteDatabse.insertWithOnConflict का उपयोग कर सकते हैं।

नई डाली पंक्ति की पंक्ति आईडी या मौजूदा पंक्ति की प्राथमिक कुंजी लौटाता है यदि इनपुट परम 'conflictAlgorithm' = CONFLICT_IGNORE या -1 यदि कोई त्रुटि त्रुटि -1 -1 अगर कोई त्रुटि

एसडीके के पुराने संस्करणों में आप निम्न कर सकते हैं:

  1. क्वेरी प्रविष्टि मौजूद है
  2. यदि प्रवेश मिला - चयनित आइटम का वापसी आईडी
  3. अगर कुछ भी नहीं मिला - SQLiteDatabse.insert का उपयोग करके प्रवेश डालें (यह नई आइटम की प्राथमिक कुंजी लौटाएगा)।

लेनदेन का उपयोग करने पर भी विचार करें यदि आवश्यक हो। < / P>


Comments