Problemas en la creación de varias tablas en sqlite

Estoy utilizando el siguiente código para crear varias tablas en una base de datos. Pero, no entiendo por qué ocurre este problema.

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

Aquí está la función de inserción

 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 } 

Y ahora en mi actividad principal, he utilizado este código para insertar en esta tabla

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

Pero me da el error que ninguna tabla "SMSFILTER" encontró.

Resultado del registro aquí

 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) 

onUpgrade se llama cuando se databse version number . Al actualizar su tabla necesita incrementar el version number base de datos, especificar una nueva consulta de creación de tablas en el método onCreate y poner ALTER TABLE al método onUpgrade para actualizar la versión anterior de la tabla. Cuando Android detecta desajuste de versión de base de datos, llamará onUpgrade método onUpgrade automáticamente

Tenga en cuenta que onCreate sólo se llama la primera vez que se crea el archivo físico de la base de datos. Parece que el método onCreate no se llama porque la base de datos ya existe en algún lugar de la tarjeta SD. Por lo tanto, la tabla SMSFilter no se crea. Necesita copiar el código dentro de onCreate al método onUpgrade (después de los comandos de la tabla de soltar). Además, para activar onUpgrade debe aumentar la versión de la base de datos.

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

Actualizar esto a

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

Su tabla de programación crear código no está funcionando como en la última línea sin espacio b / w entero y el nombre de columna está creando problema.

  • Obtener el ID del elemento ListView seleccionado (datos rellenos con DB de SQLite)
  • Manejo de bases de datos con 2 procesos
  • SQLite static openDatabase error de método de base de datos en Android
  • Android Sqlite obtiene la última inserción de fila id
  • Cómo personalizar FTS tokenizer en Android
  • Cómo realizar operaciones de base de datos mediante Async Task
  • Problema al mostrar nombres de elementos junto con imágenes que se almacenan en sqlite para android
  • Orden de orden inversa de SQLiteQueryBuilder
  • La forma más rápida y rápida de obtener nuevos mensajes sms al iniciar la aplicación - Android
  • ¿Soporta la plataforma Android SpatiaLite?
  • Android, cursor que devuelve valor booleano?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.