2013-01-17 9 views
9

मुझे लगता है कि मैंने एंड्रॉइड के साथ एक स्क्लेइट डेटाबेस बनाया है, लेकिन हर बार जब मैं एक डालने के लिए जाता हूं तो दावा करता है कि एक कॉलम मौजूद नहीं है। मैं स्कीमा को कैसे देख सकता हूं और ऑब्जेक्ट सृजन पर कॉल किया गया ऑनक्रेट विधि है?एंड्रॉइड स्क्लाइट डेटाबेस स्कीमा

उत्तर

9

आप इसे कोड के साथ कर सकते हैं। स्क्लाइट में "sqlite_master" नामक एक टेबल है जिसमें स्कीमा जानकारी होती है।

/** 
    * Get all table Details from the sqlite_master table in Db. 
    * 
    * @return An ArrayList of table details. 
    */ 
    public ArrayList<String[]> getDbTableDetails() { 
     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); 
      } 
      result.add(temp); 
     } 

     return result; 
    } 

एमुलेटर पर इसे चलाने का एक और आसान तरीका है।

  1. खुला डी डी एम एस परिप्रेक्ष्य
  2. खोजें डेटा/डेटा/PACKAGENAME/डेटाबेस/Yourfile
  3. चित्र में दिखाया गया है ऊपर दाईं तरफ db बटन से पुल पर क्लिक करें।

ओपन enter image description here

+0

धन्यवाद, मैं कोशिश करते हैं और एमुलेटर का उपयोग कर देखना चाहेंगे। यह कैसे किया जा सकता है? – Paul

+0

आपकी मदद के लिए धन्यवाद, यह बहुत अच्छा लग रहा है। – Paul

+0

@Paul तस्वीर के साथ उत्तर अद्यतन किया गया। – wtsang02

1

एक और तरीका है अपने डेटाबेस का स्कीमा जांच करने के लिए डिवाइस (या एमुलेटर) में adb shell है। Sqlite की कमांड लाइन लॉन्च करें: sqlite3 <path to your database> और कमांड प्रॉम्प्ट पर .schema टाइप करें।

देखें: http://developer.android.com/tools/help/sqlite3.html

+1

"sqlite3" चलाने के किसी कारण से मुझे संदेश मिला "/ system/bin/sh: sqlite3: नहीं मिला", लेकिन मैं प्रोग्राम को रूट ब्राउजर (जिसे मैंने खरीदा और इंस्टॉल किया है) को निष्पादित करके "find | grep sqlite3 "(" su "चलाने के बाद - जो मैं कर सकता हूं क्योंकि मेरा फोन रूट है) –

+0

मेरा मानना ​​है कि sqlite3 डिवाइस पर अनुपलब्ध है, यह केवल एक एमुलेटर पर है। –

0

आप इस प्रकार तालिका नाम प्राप्त कर सकते हैं: उत्तर के लिए

/** 
    * Get all table Details from the sqlite_master table in Db. 
    * 
    * SQlite has a table called "sqlite_master " which holds schema information. 
    * 
    * @return An ArrayList of table names. 
    */ 
    public ArrayList<String> getDbTableNames(SQLiteDatabase db) { 
     ArrayList<String> result = new ArrayList<String>(); 
     Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null); 

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

     return result; 
    }