2012-03-08 37 views
7

He tratado de crear una tabla temporal (sqlite) en AndroidNo se puede crear tabla temporal en sqlite Android

Aquí está el fragmento de código:

// No error - But cannot create TEMP table 
database.rawQuery("CREATE TEMP TABLE IF NOT EXISTS tt1 (unread_message int, target varchar)", null); 

// Error - android.database.sqlite.SQLiteException: no such table: tt1: , while compiling: INSERT INTO tt1 SELECT count(*), target FROM messages where read_status=0 and direction=1 GROUP BY target 
database.rawQuery("INSERT INTO tt1 SELECT count(*), target FROM messages where read_status=0 and direction=1 GROUP BY target", null); 

No hay error para la consulta crear tabla temporal , pero se queja de que tt1 no existe en la segunda consulta. ¿Estoy creando la tabla TEMP de forma incorrecta?

+0

Pero ambas consultas trabajan en SQLite Manager (Firefox plug-in). He buscado 'alcance SQL' y todavía no estoy listo para entender qué es 'alcance'. ¿Me puede decir más sobre el 'alcance', por favor? gracias –

+0

¿no debería ser count (target)? – njzk2

Respuesta

12

Normalmente, no debe utilizar rawQuery para crear tablas y hacer inserciones; intente utilizar SQLiteDatabase#execSQL.

Este ejemplo funciona al menos:

SQLiteOpenHelper dummy = new SQLiteOpenHelper(this, "mobileAppBeginner.db", null, 1) { 
     @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {} 
     @Override public void onCreate(SQLiteDatabase db) {} 
    }; 

    SQLiteDatabase db = dummy.getWritableDatabase(); 
    db.execSQL("CREATE TEMP TABLE messages (read_status INTEGER, direction INTEGER, target TEXT)"); 
    db.execSQL("CREATE TEMP TABLE IF NOT EXISTS tt1 (unread_message int, target varchar)"); 
    db.execSQL("INSERT INTO tt1 SELECT count(*), target FROM messages where read_status=0 and direction=1 GROUP BY target"); 
+0

¿Podemos usar esto para la base de datos creada anteriormente? De hecho, tengo algunas tablas en mi base de datos y si necesito una tabla TEMP en tiempo de ejecución, ¿cómo puedo usarla? Aquí ya había creado una base de datos. – gowri

Cuestiones relacionadas