2012-07-14 9 views
5

मैं अभी एंड्रॉइड के लिए अपने एफआईआर ऐप का विकास कर रहा हूं, मैं डेटा प्राप्त करने और सम्मिलित करने के लिए एकाधिक तालिकाओं का उपयोग कर रहा हूं। विकास के दौरान और खुद को तालिका से डेटा लाने के साथ पाया गया है जिसमें केवल दो कॉलम STATS(_id, stat_name) हैं। मेरी समस्या क्या है? मेरे पास 10 बटन के साथ एक गतिविधि है, और प्रत्येक बटन एक stat_name से संबंधित है। जब उपयोगकर्ता बटनों में से एक दबाते हैं तो _id प्राप्त करने के लिए STATS तालिका में "जा रहा" है और फिर _id को पर पर अन्य तालिका में पर इनपुट कर रहा है और मुझे मूल रूप से PlayerId के लिए समान ऑपरेशन करना है।एंड्रॉइड में SQLite से एकल मान प्राप्त करना

अभी, मैं इसे इस तरह से कर रहा हूँ:

public String getStatId(String statName){ 
    String statId = "Error"; 
    Cursor c = mDb.query(STAT_TABLE, new String[] {AbstractDbAdapter.STAT_ID, AbstractDbAdapter.STAT_NAME}, AbstractDbAdapter.STAT_NAME+ " = " +statName, null, null, null, null); 
    int count = c.getCount(); 
    if(count == 1){ 
     c.moveToFirst(); 
     statId = c.getString(c.getColumnIndex(AbstractDbAdapter.STAT_ID)); 
    } 
    c.close(); 
    mDb.close(); 
    Log.d("FootballApp","StatId =" +statId); 
    return statId;  
} 

मेरी समस्या क्या है, मुझे पता है कि केवल एक ही मान दिया वहाँ जाना चाहिए कि, और मैं अभी भी कर्सर का उपयोग करने के, तो क्या करना है । साथ ही, मेरी राय में, यह एक टेबल से एक आईडी प्राप्त करने के लिए केवल उस कोड को जटिल और समय लेने वाला तरीका लिखता है। मेरे पास मेरे आवेदन में 9 टेबल हैं, और जब भी मुझे अलग-अलग तालिका से _id की आवश्यकता होती है, तो मुझे उसी विधि को लिखना होगा, उदाहरण के लिए, केवल नाम।

क्या कोई मुझे बता सकता है कि क्या ऐसा करने का आसान तरीका है? कृपया :) धन्यवाद! :)

उत्तर

7

मुझे लगता है कि यह उससे कहीं अधिक आसान नहीं है। हालांकि आप विधि अधिक सामान्य बना सकते हैं ताकि आप कोड का पुन: उपयोग कर सकते हैं:

public String getFromDb(String tableName, String select, String selectBy, String selectName){ 
    String selection = "Error"; 
    Cursor c = mDb.query(tableName, new String[] {select}, selectBy + "=" + selectName, null, null, null, null); 
    if(c.getCount() == 1){ 
     c.moveToFirst(); 
     selection = c.getString(c.getColumnIndex(select)); 
    } 
    c.close(); 
    mDb.close(); 
    Log.d("FootballApp", select + "=" + selection); 
    return id;  
} 

उदाहरण उपयोग:

int statID = getFromDb(STAT_TABLE, AbstractDbAdapter.STAT_ID, AbstractDbAdapter.STAT_NAME, statName); 
+0

टाइपिंग का एक छोटा सा की जगह 'selectBy +" = "+ selectName, null' ' selectBy + "=?", नई String [] {selectName} के साथ बचत होगी ' – Afilu

7

कि के रूप में यह हो जाता है के बारे में के रूप में सरल है, लेकिन Cursor.moveToFirst() रिटर्न झूठी अगर कर्सर रिक्त है इसलिए आप c.getCount() कॉल काट सकते हैं और इसके बजाय बस if(c.moveToFirst()) कह सकते हैं। यही कारण है कि आप अधिक सुरक्षित कोड के लिए :)

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