Не удается создать таблицу TEMP в Android sqlite

Я попытался создать временную таблицу (sqlite) в Android.

Вот фрагмент кода:

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

В запросе на создание TEMP TABLE нет ошибки, но он жалуется, что tt1 не существует во втором запросе. Я неправильно создаю таблицу TEMP?


person mobile app Beginner    schedule 08.03.2012    source источник
comment
Но оба запроса работают в SQLite Manager (плагин Firefox). Я искал «область SQL» и до сих пор не готов понять, что такое «проблема области». Не могли бы вы рассказать мне больше о «проблеме масштаба», пожалуйста? Благодарность   -  person mobile app Beginner    schedule 08.03.2012
comment
разве это не должно быть подсчетом (целью)?   -  person njzk2    schedule 08.03.2012


Ответы (1)


Как правило, вы не должны использовать rawQuery для создания таблиц и выполнения вставок — попробуйте использовать SQLiteDatabase#execSQL.

Этот пример работает по крайней мере:

    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");
person Jens    schedule 08.03.2012
comment
Можем ли мы использовать это для ранее созданной базы данных? На самом деле у меня есть несколько таблиц в моей базе данных, и если мне нужна таблица TEMP во время выполнения, значит, как я могу ее использовать. Здесь я уже создал базу данных. - person gowri; 10.10.2012
comment
@gowri это сработало? Можете ли вы использовать его с существующей базой данных комнаты? - person vizsatiz; 10.06.2020