2013-03-13 10 views
26

मैं इस कोडएंड्रॉइड sqlite डेटाबेस में सभी टेबल नाम कैसे प्राप्त करें?

Cursor c=db.rawQuery("SELECT name FROM sqlite_master WHERE type = 'table'",null); 

c.moveToFirst(); 

while(!c.isAfterLast()){ 

Toast.makeText(activityName.this, "Table Name=> "+c.getString(0), Toast.LENGTH_LONG).show(); 

} 

कोशिश की है, लेकिन यह त्रुटि "android.database.sqlite.SQLiteException: no such table: sqlite_master(code 1):,while compiling: SELECT name FROM sqlite_master WHERE type='table'"

कैसे सब तालिका नाम लाने के लिए फेंकता है? मेरी मदद करो

अग्रिम धन्यवाद ..

+2

क्या आपको अपने डेटाबेस में टेबल का नाम पता नहीं होना चाहिए? – njzk2

+0

मैं गतिशील रूप से तालिका बनाना चाहता हूं जो डेटाबेस थर्म में नहीं बनाया गया है, मैं अपने डेटाबेस में मौजूदा तालिका नाम चाहता हूं। MySQL – Sandeep

उत्तर

52

की जांच की गई, परीक्षण किया है और कार्य कर रहा। इस कोड का प्रयास करें:,

Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null); 

if (c.moveToFirst()) { 
    while (!c.isAfterLast()) { 
     Toast.makeText(activityName.this, "Table Name=> "+c.getString(0), Toast.LENGTH_LONG).show(); 
     c.moveToNext(); 
    } 
} 

मैं यह सोचते हैं हूँ लाइन नीचे कुछ बिंदु पर, आप शायद एक ListView या कुछ में प्रदर्शित करने के लिए तालिका नाम की एक सूची हड़पने के लिए होगा। सिर्फ टोस्ट नहीं दिखाओ।

अनचाहे कोड। बस मेरे दिमाग के शीर्ष पर क्या आया। उत्पादन एप में इसका उपयोग करने से पहले परीक्षण करें। ;-)

उस स्थिति में, कोड में निम्न परिवर्तन ऊपर तैनात करने पर विचार करें:

ArrayList<String> arrTblNames = new ArrayList<String>(); 
Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null); 

    if (c.moveToFirst()) { 
     while (!c.isAfterLast()) { 
      arrTblNames.add(c.getString(c.getColumnIndex("name"))); 
      c.moveToNext(); 
     } 
    } 
+0

धन्यवाद सिद्धार्थ इसके काम .. – Sandeep

+0

@ संदीप: खुशी मैं मदद कर सकता था। :-) –

+4

मुझे समझ में नहीं आता कि आपकी क्वेरी कैसे अलग है? – njzk2

5

तालिका

schema.sqlite_master

से पहले स्कीमा जोड़ने से लेकर SQL FAQ

आप sqlite3 कमांड लाइन चला रहे हैं की कोशिश एक्सेस प्रोग्राम आप सभी टेबलों की सूची प्राप्त करने के लिए ".tables" टाइप कर सकते हैं। या आप सभी टेबल और इंडेक्स सहित संपूर्ण डेटाबेस स्कीमा देखने के लिए ".schema" टाइप कर सकते हैं। इनमें से किसी भी आदेश का पालन एक LIKE पैटर्न द्वारा किया जा सकता है जो प्रदर्शित होने वाली तालिकाओं को प्रतिबंधित करेगा।

एक C/C++ प्रोग्राम (या एक स्क्रिप्ट Tcl/रूबी/पर्ल/पायथन बाइंडिंग का उपयोग करके) आप "SQLITE_MASTER" नामक एक विशेष मेज पर एक का चयन करने से मेज और सूचकांक के नाम करने के लिए उपयोग कर सकते हैं के भीतर से

। प्रत्येक SQLite डेटाबेस में SQLITE_MASTER तालिका है जो डेटाबेस के लिए स्कीमा को परिभाषित करती है। SQLITE_MASTER तालिका इस प्रकार है:

टेबल sqlite_master ( प्रकार पाठ, नाम पाठ, tbl_name पाठ, rootpage पूर्णांक, एसक्यूएल पाठ ) बनाने के;

+0

में शो टेबल की तरह धन्यवाद :(लेकिन मैंने पहले से ही स्कीमा बनाया है लेकिन अभी भी काम नहीं कर रहा है क्या आप स्क्लाइट डेटाबेस से सभी टेबल नाम प्राप्त करने के कोड को पेस्ट कर सकते हैं एंड्रॉइड – Sandeep

+0

@ सिद्धार्थ लेले का क्या उल्लेख है। उन्होंने एक शर्त जोड़ा क्योंकि आपको नहीं पता कि क्या आपको कोई परिणाम प्राप्त होने जा रहे हैं। यदि यह विफल हो जाता है तो कर्सर क्वेरी को प्रतिस्थापित करें: 'कर्सर सी = db.rawQuery ("अपने नाम से चुनें_schema.sqlite_master जहां टाइप =' टेबल '", शून्य); ' – AlexBcn

+0

धन्यवाद, लेकिन मेरे पास है पहले से ही my_schema.sqlite_master के साथ कोशिश की लेकिन यह काम नहीं किया। और आपकी बहुमूल्य प्रतिक्रिया के लिए धन्यवाद। – Sandeep

2

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

SELECT name FROM sqlite_master WHERE type = "table"; 
+0

मैंने कोशिश की है .. – Sandeep

+11

यह प्रश्न में कोड का सिर्फ एक टुकड़ा होना प्रतीत होता है। आम तौर पर, "इसे आजमाएं" "सुझाव देता है कि उत्तरदाता ने इसे स्वयं नहीं किया। –

4

कि टेबल के सभी स्तंभ की सूची के साथ तालिका नाम प्राप्त करने के लिए

public void getDatabaseStructure(SQLiteDatabase db) { 

     Cursor c = db.rawQuery(
       "SELECT name FROM sqlite_master WHERE type='table'", null); 
     ArrayList<String[]> result = new ArrayList<String[]>(); 
     int i = 0; 
     result.add(c.getColumnNames()); 
     for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
      String[] temp = new String[c.getColumnCount()]; 
      for (i = 0; i < temp.length; i++) { 
       temp[i] = c.getString(i); 
       System.out.println("TABLE - "+temp[i]); 


       Cursor c1 = db.rawQuery(
         "SELECT * FROM "+temp[i], null); 
       c1.moveToFirst(); 
       String[] COLUMNS = c1.getColumnNames(); 
       for(int j=0;j<COLUMNS.length;j++){ 
        c1.move(j); 
        System.out.println(" COLUMN - "+COLUMNS[j]); 
       } 
      } 
      result.add(temp); 
     } 
8

अपनी एसक्यूएल स्ट्रिंग को इस पर बदलें:

"SELECT name FROM sqlite_master WHERE type='table' AND name!='android_metadata' order by name"

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