2012-03-28 10 views
50

मेरे पास एक टेबल question_table और एक ImageButton (पीछे) है। मुझे पर वापस पर क्लिक करने के बाद डेटाबेस से अंतिम सम्मिलित रिकॉर्ड प्राप्त करने की आवश्यकता है। question, optionA, optionB, optionC, optionD, और मैं अपने Activity पर इस्तेमाल के लिए डेटा की जरूरत है:स्क्लाइट से अंतिम रिकॉर्ड कैसे प्राप्त करें?

मेरे पंक्ति निम्न स्तंभ हैं। मैं डेटाबेस में एक विधि बनाता हूं लेकिन यह काम नहीं कर रहा है।

MySQLiteHelper.java निकालने:

public List<ObjectiveWiseQuestion> getLastInsertQuestion() 
{ 
    // long index = 0; 
    List<ObjectiveWiseQuestion>LocwiseProfileList=new ArrayList<ObjectiveWiseQuestion>(); 
    db = getReadableDatabase(); 
    Cursor cursor = db.query(
      "sqlite_sequence", 
      new String[]{"seq"}, 
      "name = ?", 
      new String[]{TABLE_QUESTION}, 
      null, 
      null, 
      null, 
      null); 

    if (cursor.moveToFirst()) 
    { 
     do { 
      ObjectiveWiseQuestion owq= new ObjectiveWiseQuestion(); 

      owq.setQuestion(cursor.getString(2)); 
      owq.setOptionA(cursor.getString(3)); 
      owq.setOptionB(cursor.getString(4)); 
      owq.setOptionC(cursor.getString(5)); 
      owq.setOptionD(cursor.getString(6)); 
      owq.setCorrectOption(cursor.getString(7)); 
      LocwiseProfileList.add(owq); 
     } while(cursor.moveToNext()); 

     db.close(); 
    } 

    return LocwiseProfileList; 
} 

OnClickListner से AddQuestionActivity.java

imgBack.setOnClickListener(new View.OnClickListener() 
{      
    @Override 
    public void onClick(View v) 
    { 
     msg(); 
     emptyFormField(); 

     try { 
      final List<ObjectiveWiseQuestion> LocWiseProfile = db.getLastInsertQuestion();  

      for (final ObjectiveWiseQuestion cn : LocWiseProfile) 
      { 
       db=new MySQLiteHelper(getBaseContext()); 
       db.getWritableDatabase(); 
       txtQuestion.setText(cn.getQuestion()); 
       txtOptionA.setText(cn.getOptionA()); 
       txtOptionB.setText(cn.getOptionB()); 
       txtOptionC.setText(cn.getOptionC()); 
       txtOptionD.setText(cn.getOptionD()); 
       txtCorrectOption.setText(cn.getCorrectOption()); 
       db.close(); 
      } 
     } catch(Exception e) { 
      e.printStackTrace(); 
     }   
    } 
}); 

मुझे कुछ संकेत दे

यहाँ संदर्भ के लिए कोड है।
अग्रिम धन्यवाद ..

उत्तर

124

इस प्रयास करें:

SELECT * 
    FROM TABLE 
    WHERE ID = (SELECT MAX(ID) FROM TABLE); 

या

आप भी समाधान निम्नलिखित इस्तेमाल किया जा सकता है:

चुनें * tablename आदेश से BY स्तंभ DESC में LIMIT 1;

+0

भी मेरे लिए मददगार:

तो, बस डाल एक तालिका में अंतिम पंक्ति पाने के लिए। धन्यवाद। –

+0

का आनंद लें .... हार्दिक – Hasmukh

+18

यह उस उद्देश्य के लिए बहुत बुरा अनुरोध है क्योंकि 'sqlite' परिणाम लौटने से पहले अपने आईडी (धीमा) द्वारा सभी रिकॉर्ड को सॉर्ट करना चाहिए, स्टीफन गुयेन' DESC' और 'LIMIT में 1' –

5

आप पहले से ही कर्सर मिल गया है, तो यह है कि कैसे आप कर्सर से पिछले रिकॉर्ड मिल सकता है है:

cursor.moveToPosition(cursor.getCount() - 1); 
//then use cursor to read values 
+0

getContentResolver() क्वेरी पर कर्सर के निर्माण के माध्यम से इसे प्राप्त करने का एक तरीका है? – ralphgabb

20

अपनी मेज से पिछले रिकॉर्ड प्राप्त करने के लिए ..

String selectQuery = "SELECT * FROM " + "sqlite_sequence"; 
Cursor cursor = db.rawQuery(selectQuery, null); 
    cursor.moveToLast(); 
+0

आपको WHERE = TABLE_NAME कथन जोड़ना चाहिए जब आपके SQLite डीबी में एक से अधिक तालिका – aphoe

+0

@aphoe को WHERE = TABLE_NAME की आवश्यकता नहीं है क्योंकि "sqlite_sequence" तालिका संदर्भ है। – apkisbossin

+0

मुझे कोई गारंटी नहीं है कि एक निरस्त क्वेरी में अंतिम रिकॉर्ड तालिका का अंतिम रिकॉर्ड होगा। मैं शर्त लगाता हूं कि यह "अक्सर" काम करता है। हालांकि आप इस पर भरोसा नहीं कर सकते हैं। – Anders8

106

मुझे लगता है कि शीर्ष जवाब थोड़ा वर्बोज़ है। बस निम्नलिखित में टाइप करें!

SELECT * FROM table ORDER BY column DESC LIMIT 1; 

खुश दिन।

+4

निश्चित रूप से यह सही जवाब है! – Jorge

+0

"शीर्ष उत्तर" हमेशा शीर्ष उत्तर नहीं रहता है। क्या आपका मतलब है हस्मुख का? – LarsH

6

मुझे लगता है कि अगर आप SQLiteDatabase वर्ग से विधि क्वेरी पूरे एसक्यूएल स्ट्रिंग के inseted है, जो होगा का उपयोग बेहतर होगा:

Cursor cursor = sqLiteDatabase.query(TABLE, allColluns, null, null, null, null, ID +" DESC", "1"); 

पिछले दो मापदंडों आदेश द्वारा और सीमा है।

आपको कम से अधिक देख सकते हैं: http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html

1

मान लीजिए आप तालिका dbstr.TABNAME की अंतिम पंक्ति के लिए देख रहे हैं, "_ id" (उदाहरण के लिए BaseColumns._ID) नामक एक पूर्णांक स्तंभ में, लेकिन anyother स्तंभ हो सकता है तुम्हें चाहिए।

public int getLastId() { 
    int _id = 0; 
    SQLiteDatabase db = dbHelper.getReadableDatabase(); 
    Cursor cursor = db.query(dbstr.TABNAME, new String[] {BaseColumns._ID}, null, null, null, null, null); 

    if (cursor.moveToLast()) { 
     _id = cursor.getInt(0); 
    } 

    cursor.close(); 
    db.close(); 
    return _id; 
} 
1

सिर्फ सरल आप कर्सर moveToLast() के साथ स्थानांतरित कर सकते हैं; विधि पिछले रिकॉर्ड

cursor.moveToLast() करने के लिए आगे बढ़ने के लिए प्रदान करता है;

0

एसक्लाइट में, एक तालिका है जिसे sqlite_sequence कहा जाता है, इस तालिका में तालिका का नाम होता है और यह अंतिम आईडी संख्या है (यदि आईडी स्वतः बढ़ी है)।

Select * from TABLENAME where id=(SELECT * from sqlite_sequence where name ='TABLENAME')