gpt4 book ai didi

java - 有时 SQLite 查询 android 上的空光标

转载 作者:行者123 更新时间:2023-11-29 21:07:12 27 4
gpt4 key购买 nike

我们一直在设置一个 android 应用程序,并在使用 SQLite 时遇到一个奇怪的错误,其中相同的查询有时会提供结果,有时不会。

运行以下代码时,它可能会返回请求的行,或者 cursor.moveToFirst 可能会返回 false。导致返回空值。

我一直无法弄清楚为什么 cursor.moveToFirst() 可能会失败。该代码运行相同的语句,名称在同一数据库中相同。奇怪的是,它几乎似乎在提供请求的行和不提供任何内容之间交替。此方法是从 ASyncTask 调用的,因此可能会连续调用多个,但如果任务是从按钮触发的,则不太可能同时调用两次。

最低 android api 级别为 8

connectionInfo 对象是返回信息的包装器。connectionName 是与正在检索的行关联的名称,当前始终为“默认”。对象 databaseHelper 是 SQLiteOpenHelper 类的扩展。readFromCursor 函数从游标中读取项目并正常工作,问题是当 cursor.moveToFirst() 返回 false 时它不会被调用。

public ConnectionInfo getConnectionByName(String connectionName) {
ConnectionInfo info = null;
SQLiteDatabase db = databaseHelper.getWritableDatabase();
Cursor cursor = db.rawQuery(STMT_SELECT_BY_NAME , new String[]{connectionName});

if (cursor != null) {
if (cursor.moveToFirst()) {
info = readFromCursor(cursor);
}
cursor.close();
}

DBRefcounter.closeDB(db);

return info;
}

调用自:

public ConnectionInfo createConnectionInfo(String connectionName, String siteURL, String subsite, String username, String password){


ConnectionInfo info = getConnectionByName(connectionName);

if(info == null){
SQLiteDatabase db = databaseHelper.getWritableDatabase();


ContentValues values = new ContentValues();

values.put(COLUMN_CONNECTION_NAME, connectionName);
values.put(COLUMN_SERVER_URL, siteURL);
values.put(COLUMN_SUBSITE, subsite);
values.put(COLUMN_USERNAME, username);
values.put(COLUMN_PASSWORD, password);
values.put(COLUMN_LAST_ACCESS_TIME, System.currentTimeMillis());

long id = db.insert(TABLE_CONNECTION, null, values);

DBRefcounter.closeDB(db);//clalls db.close and lowers counter

if(id >= 0){

//Build object to return
}
}
else{
//update the existing object
}

return info;
}

更新:

谁能告诉我 .close() 和 releaseReference 方法之间的区别?根据 API,它们应该是相同的,但它们显示出不同的行为。

最佳答案

这可能是解释:

连续调用失败,因为您没有适本地终止第一个调用:

  1. 返回前,需要调用db.close 和cusrsor.close()。 db.close 更为重要。
  2. 不这样做会导致第二次调用出错,从而导致游标为空。此异常本质上关闭了数据库。因此,第 3 次调用成功。

关于java - 有时 SQLite 查询 android 上的空光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24181972/

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