gpt4 book ai didi

Android sqlite无法创建TEMP表

转载 作者:行者123 更新时间:2023-11-29 01:15:36 25 4
gpt4 key购买 nike

我想在 android sqlite 数据库中创建和使用一个临时表。
SQL语句执行无异常但没有建表!
使用下面的示例代码运行我的应用程序,我没有得到任何表格:

开始编辑

public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "mydb.db";
private static DatabaseHelper instance;

public static synchronized DatabaseHelper getHelper(Context context){
if (instance == null)
instance = new DatabaseHelper(context);
return instance;
}

private DatabaseHelper(Context c) {
super(c,DB_NAME,null,1);
}

@Override
public void onConfigure(SQLiteDatabase db) {
super.onConfigure(db);
db.enableWriteAheadLogging ();
db.setLocale(Locale.getDefault());
}

@Override
public void onCreate(SQLiteDatabase db) {
// lots of table creation
db.execSQL("CREATE TABLE my_table (id INTEGER PRIMARY KEY, value TEXT)");
// more tables ....
}}
...... sample
DatabaseHelper databaseHelper = DatabaseHelper.getHelper(this);

结束编辑

SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.execSQL("create TEMP table my_temp_table (id integer primary key, value text)"); // no exceptions

Cursor cursor = db.query("SQLITE_TEMP_MASTER", null, null, null, null, null, null);

while( cur.moveToNext()) {
// no lines (no temporary tables)
}

如果我从 select 语句创建一个临时表,然后查询(在同一个数据库连接中)创建的表,我得到“没有这样的表......异常”!

db.execSQL("create TEMP table my_temp_table as select * from my_table");
Cursor cursor = db.query("temp.my_temp_table", null, null, null, null, null, null);
^^^ no such table: temp.my_temp_table(code 1): , while compiling: SELECT * FROM temp.my_temp_table

让我感到困惑的是......相同的 sql 代码在 SQLiteStudio 中完美运行,即在应用程序外部和 android 设备外部。也许我忘记启用某些东西或者...我需要特定的设备许可?

最佳答案

当您使用 db.enableWriteAheadLogging() 启用 Write-Ahead Logging 时,SQLiteDatabase 会自动多路复用数据库连接。用于 db.query(...) 的连接与用于 db.execSQL("CREATE TEMP TABLE ...") 的连接不同。

您可以将 db.query(...) 包装在一个事务中,并强制 SQLiteDatabase 使用与 execSQL 相同的连接。

db.beginTransaction();
Cursor cursor = db.query("temp.my_temp_table", null, null, null, null, null, null);
try {
while (cursor.moveToNext()) {
// ...
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}

关于Android sqlite无法创建TEMP表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39896759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com