gpt4 book ai didi

android - 搜索存储在 sqlite 数据库中的字符串的最快方法

转载 作者:太空宇宙 更新时间:2023-11-03 11:51:14 25 4
gpt4 key购买 nike

我有大量字符串,大约 15,000 个,我使用以下代码存储在 SQLite 数据库中:

 void addKey(String key, String value, String table) {
SQLiteDatabase db = this.getWritableDatabase();

ContentValues values = new ContentValues();
values.put(KEY_KEY, key); // Contact Name
values.put(KEY_VALUE, value); // Contact Phone

// Inserting Row
db.insert(table, null, values);
db.close(); // Closing database connection

}

然后我使用以下方法搜索该数据库,以挑选出与我要查找的键匹配的任何字符串:

public String searchKeyString(String key, String table){
String rtn = "";
Log.d("searchKeyString",table);

// Select All Query
String selectQuery = "SELECT * FROM " + table;

SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);

// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
Log.d("searchKeyString","searching");

if(cursor.getString(1).equals(key))
rtn = rtn + "," + cursor.getString(2);
} while (cursor.moveToNext());
}
cursor.close();
db.close();
Log.d("searchKeyString","finish search");

return rtn;
}

目标是在用户在 keep board 上打字时实时执行此操作,因此响应时间是关键,而现在的情况是需要一秒钟以上的时间来完成搜索。

我考虑过先将所有项目读入一个数组列表,然后排序可能更快,但我认为该大小的数组列表可能会导致内存问题。在我的数据库中搜索这些条目的最佳方式是什么?

最佳答案

您可以做几件事...

  • 将返回更改为 StringBuilder 直到结束。
  • 只使用可读版本的数据库(虽然这可能没有太大区别)
  • 不要每次都获取一个新的数据库实例,保持打开直到你不再需要它
  • 在 SQL 查询中使用“WHERE”参数仅查询您需要的内容。

请参阅下面的代码并进行一些更改:

// move this somewhere else in your Activity or such
SQLiteDatabase db = this.getReadableDatabase();

public String searchKeyString(String key, String table){
StringBuilder rtn = new StringBuilder();
Log.d("searchKeyString",table);

// Select All Query
String selectQuery = "SELECT * FROM " + table + " WHERE KEY_KEY=?";

Cursor cursor = db.rawQuery(selectQuery, new String[] {key});
// you can change it to
// db.rawQuery("SELECT * FROM "+table+" WHERE KEY_KEY LIKE ?", new String[] {key+"%"});
// if you want to get everything starting with that key value

// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
Log.d("searchKeyString","searching");

rtn.append(",").append(cursor.getString(2));
} while (cursor.moveToNext());
}
cursor.close();
Log.d("searchKeyString","finish search");

return rtn.toString();
}

请注意,即使您希望这对用户“实时”发生,您仍然需要将其移动到单独的线程或 ASyncTask 中,否则您将遇到问题....

关于android - 搜索存储在 sqlite 数据库中的字符串的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13695904/

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