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
- Utilizando un botón para exportar sqlite db a un archivo excel-readable (quizás csv)?
- ¿Podemos usar Guid como clave principal en la base de datos de SQL Server?
- ¿Puedo bloquear una tabla SQLite para el subproceso actual?
- Necesidad de mostrar una consulta SQLite en orden descendente
- ¿Cómo puedo devolver un registro basado sólo en una coincidencia parcial de ese registro?
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)
- Cómo formatear la cláusula WHERE y '?' En una consulta SQLite?
- Envío de SQLite db al servicio web
- Límites de la base de datos SQLite en Android
- Crear base de datos SQLite en android
- Cómo comprobar si ya existe un valor en la base de datos en Android
- Devolver todas las columnas de una tabla SQLite en Android
- Android: ¿ver bases de datos SQLite en el dispositivo?
- Cómo utilizar join consulta en CursorLoader cuando su constructor no lo admite
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.
- Xamarin Forms Navegación de página MasterDetail causando un accidente en android , Funciona en iOS y UWP
- Comunicarse con socket.io desde android