sqlite

2012-11-25 4 views
9

में एकाधिक तालिकाओं को बनाने में समस्याएं मैं डेटाबेस में एकाधिक तालिकाओं को बनाने के लिए निम्न कोड का उपयोग कर रहा हूं। लेकिन, मुझे समझ में नहीं आता कि यह समस्या क्यों होती है।sqlite

private static final String TABLE_SMSFilter = "SMSFilter"; 


public void onCreate(SQLiteDatabase db) 
    { 
     Log.d("Test", "Control is in Oncreate()"); 
     String CREATE_SMSSSCHEDULE_TABLE = "CREATE TABLE " + TABLE_SMSSchedule 
       + "(" + KEY_ID + " INTEGER PRIMARY KEY autoincrement," 
       + KEY_NUMBER + " TEXT)"; 

     String CREATE_PROFILE_SCHEDULE_TABLE = "CREATE TABLE " 
       + TABLE_ProfileSchedule + "(" + ProfileSchedule_ID 
       + " INTEGER PRIMARY KEY autoincrement," 
       + ProfileSchedule_NUMBER + " TEXT, " 
       + ProfileSchedule_ProfileMode + " TEXT," 
       + ProfileSchedule_CalendarID + "INTEGER)"; 

     String CREATE_SMS_FILTER_TABLE = "CREATE TABLE " + TABLE_SMSFilter 
       + "(" + SMSFilter_ID + " INTEGER PRIMARY KEY autoincrement," 
       + SMSFilter_NUMBER + " TEXT)"; 

     db.execSQL(CREATE_SMSSSCHEDULE_TABLE); 
     db.execSQL(CREATE_PROFILE_SCHEDULE_TABLE); 
     db.execSQL(CREATE_SMS_FILTER_TABLE); 
    } 

    // Upgrading database 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 
     // Drop older table if existed 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_SMSSchedule); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_ProfileSchedule); 

     db.execSQL("DROP TABLE IF EXISTS " + TABLE_SMSFilter); 

     // Create tables again 
     onCreate(db); 
    } 

यहाँ डालने समारोह

public void addSMSFilter(SMSFilter filterVariable) 
    { 

     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(SMSFilter_NUMBER, filterVariable.getPhoneNumber()); // Contact 
                     // Name 
     // values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone 

     Log.d("test", "inserting" + filterVariable.getPhoneNumber()); 
     // Inserting Row 
     db.insert(TABLE_SMSFilter, null, values); 

     db.close(); // Closing database connection 
    } 

और अब मेरा मुख्य गतिविधि में, मैं इस कोड इस तालिका

DatabaseHandler db = new DatabaseHandler(this); 

     SMSFilter sms = new SMSFilter("1234556"); 
     db.addSMSFilter(sms); 

में डालने के लिए प्रयोग किया जाता है, लेकिन यह मेरे कि कोई त्रुटि देता है तालिका "एसएमएसफिल्टर" मिला।

लॉग परिणाम जब databse version number बदल गया है

11-25 22:52:22.643: I/Database(12209): sqlite returned: error code = 1, msg = no such table: SMSFilter 
11-25 22:52:22.643: E/Database(12209): Error inserting PhoneNo=1234556 
11-25 22:52:22.643: E/Database(12209): android.database.sqlite.SQLiteException: no such table: SMSFilter: , while compiling: INSERT INTO SMSFilter(PhoneNo) VALUES(?); 
11-25 22:52:22.643: E/Database(12209): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 
11-25 22:52:22.643: E/Database(12209): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91) 
11-25 22:52:22.643: E/Database(12209): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64) 
11-25 22:52:22.643: E/Database(12209): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80) 
11-25 22:52:22.643: E/Database(12209): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:36) 
11-25 22:52:22.643: E/Database(12209): at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1212) 
11-25 22:52:22.643: E/Database(12209): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1610) 
11-25 22:52:22.643: E/Database(12209): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1484) 
11-25 22:52:22.643: E/Database(12209): at com.scheduler.database.DatabaseHandler.addSMSFilter(DatabaseHandler.java:327) 
11-25 22:52:22.643: E/Database(12209): at com.schedule.test.TestActivity.onCreate(TestActivity.java:31) 
11-25 22:52:22.643: E/Database(12209): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1069) 
11-25 22:52:22.643: E/Database(12209): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2751) 
11-25 22:52:22.643: E/Database(12209): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2803) 
11-25 22:52:22.643: E/Database(12209): at android.app.ActivityThread.access$2300(ActivityThread.java:135) 
11-25 22:52:22.643: E/Database(12209): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136) 
11-25 22:52:22.643: E/Database(12209): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-25 22:52:22.643: E/Database(12209): at android.os.Looper.loop(Looper.java:144) 
11-25 22:52:22.643: E/Database(12209): at android.app.ActivityThread.main(ActivityThread.java:4937) 
11-25 22:52:22.643: E/Database(12209): at java.lang.reflect.Method.invokeNative(Native Method) 
11-25 22:52:22.643: E/Database(12209): at java.lang.reflect.Method.invoke(Method.java:521) 
11-25 22:52:22.643: E/Database(12209): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
11-25 22:52:22.643: E/Database(12209): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
11-25 22:52:22.643: E/Database(12209): at dalvik.system.NativeStart.main(Native Method) 
+0

संपूर्ण लॉगकैट क्या कहता है? – Ahmad

+0

@ अहमद अद्यतन प्रश्न देखें –

+2

क्या आपने ऐप को अनइंस्टॉल करने का प्रयास किया था और फिर इसे पुनः इंस्टॉल कर दिया था? – Luksprog

उत्तर

1

onUpgrade कहा जाता है यहाँ है। अपनी तालिका को अपडेट करते समय आपको डेटाबेस version number में वृद्धि करने की आवश्यकता है, onCreate विधि में नई तालिका निर्माण क्वेरी निर्दिष्ट करें और ALTER TABLE को onUpgrade तालिका के पिछले संस्करण को अपडेट करने के लिए onUpgrade विधि डालें। एंड्रॉयड का पता लगाता है डेटाबेस संस्करण बेमेल, यह स्वतः ही onUpgrade विधि

String CREATE_PROFILE_SCHEDULE_TABLE = "CREATE TABLE " 
      + TABLE_ProfileSchedule + "(" + ProfileSchedule_ID 
      + " INTEGER PRIMARY KEY autoincrement," 
      + ProfileSchedule_NUMBER + " TEXT, " 
      + ProfileSchedule_ProfileMode + " TEXT," 
      + ProfileSchedule_CalendarID + " INTEGER)"; 

आपका अनुसूची तालिका बनाने के कोड को यह फोन करेगा

0
String CREATE_PROFILE_SCHEDULE_TABLE = "CREATE TABLE " 
      + TABLE_ProfileSchedule + "(" + ProfileSchedule_ID 
      + " INTEGER PRIMARY KEY autoincrement," 
      + ProfileSchedule_NUMBER + " TEXT, " 
      + ProfileSchedule_ProfileMode + " TEXT," 
      + ProfileSchedule_CalendarID + "INTEGER)"; 

अद्यतन कोई जगह अंतिम पंक्ति में के रूप में काम नहीं कर रहा/पूर्णांक डब्ल्यू और ख कॉलम नाम समस्या पैदा कर रहा है।

0

ध्यान दें कि ऑनक्रेट केवल पहली बार डेटाबेस भौतिक फ़ाइल बनाई जा रही है। ऐसा लगता है कि ऑनक्रेट विधि को कॉल नहीं किया गया है क्योंकि डेटाबेस पहले से ही एसडीकार्ड में मौजूद है। इसलिए तालिका एसएमएसफिल्टर नहीं बनाया गया है। आपको पर विधि (ड्रॉप तालिका आदेशों के बाद) पर कोड को कॉपी करने की आवश्यकता है। इसके अलावा, को पर अपग्रेड करने के लिए आपको डेटाबेस संस्करण को बढ़ाना होगा।

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

  • कोई संबंधित समस्या नहीं^_^