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

android– 搜索存储在sqlite数据库中的字符串的最快方法,第1张

概述我有大量的字符串,大约15,000,我使用以下代码存储在SQLite数据库中:voidaddKey(Stringkey,Stringvalue,Stringtable){SQLiteDatabasedb=this.getWritableDatabase();ContentValuesvalues=newContentValues();values.put(KEY_KEY,key)

我有大量的字符串,大约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;    }

目标是在用户在保留板上键入时实时执行此 *** 作,因此响应时间是关键,现在它的方式需要一秒钟才能完成搜索.

我考虑最初将所有项目读入数组列表并对可能更快的内容进行排序,但我认为该大小的数组列表可能会导致内存问题.在我的数据库中搜索这些条目的最佳方法是什么?

解决方法:

你可以做几件事……

>将返回值更改为StringBuilder直到结束.
>只使用数据库的可读版本(尽管可能没有太大的区别)
>每次都不要获取数据库的新实例,保持打开直到不再需要它为止
>仅使用SQL查询中的“WHERE”参数查询所需内容.

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

// move this somewhere else in your Activity or suchsqliteDatabase 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();}

请注意,即使您希望“实时”为用户执行此 *** 作,您仍然需要将其移动到单独的Thread或ASyncTask中,否则您将遇到问题….

总结

以上是内存溢出为你收集整理的android – 搜索存储在sqlite数据库中的字符串的最快方法全部内容,希望文章能够帮你解决android – 搜索存储在sqlite数据库中的字符串的最快方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1116003.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存