2012-11-25 16 views
9

Sto usando il seguente codice per creare più tabelle in un database. Ma, non capisco perché questo problema si verifica.problemi nella creazione di più tabelle in 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); 
    } 

qui è la funzione di inserimento

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 
    } 

e ora nella mia attività principale, ho usato questo codice da inserire in questa tabella

DatabaseHandler db = new DatabaseHandler(this); 

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

ma mi dà l'errore che non tabella "SMSFILTER" trovata.

risultato Log è qui

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

Cosa dice tutto il LogCat? – Ahmad

+0

@Ahmad guarda la domanda aggiornata –

+2

Hai provato a disinstallare l'app e quindi a reinstallarla? – Luksprog

risposta

1

onUpgrade viene chiamato quando databse version number viene modificato. Quando si aggiorna la tabella è necessario incrementare il database version number, specificare la nuova query di creazione tabella nel metodo onCreate e inserire il metodo ALTER TABLE in onUpgrade per aggiornare la versione precedente della tabella. Quando Android rileva la versione del database non corrispondente, si chiamerà onUpgrade metodo automaticamente

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)"; 

Aggiornamento questo per

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

La tabella calendario creare il codice non funziona come nell'ultima riga spazio b/w intero e il nome della colonna sta creando problemi.

0

Si noti che onCreate viene chiamato solo la prima volta che viene creato il file fisico del database. Sembra che il metodo onCreate non venga chiamato perché il database esiste già da qualche parte nella SDCard. Quindi la tabella SMSFilter non è stata creata. È necessario copiare il codice all'interno di onCreate sul metodo onUpgrade (dopo i comandi della tabella di rilascio). Inoltre, per attivare su Aggiornamento è necessario aumentare la versione del database.

Problemi correlati