gpt4 book ai didi

android - Android 中的游标(SQLite)

转载 作者:行者123 更新时间:2023-11-29 22:07:46 24 4
gpt4 key购买 nike

我在 Android 中遇到光标问题...

public int getCountNameContainWord(String word){
long time1=System.currentTimeMillis();
Cursor cur = bdd.query(TABLE_IDF, new String[] {"COUNT(idfs)"}, "idfs LIKE '"+word+"%'", null, null, null, null, null);
long time2=System.currentTimeMillis();
System.out.println("time query : "+(time2-time1));
if(cur!=null){
cur.moveToFirst();
long time3=System.currentTimeMillis();
System.out.println("time move cursor : "+(time3-time2));
int i=Integer.parseInt(cur.getString(0));
return i;
}else{
return 0;
}
}

结果:

time query : 3

time move cursor : 3784

移动光标很慢,不知道为什么...结果只有一行...你有让它更快的想法吗?通常,它只需要几毫秒...

PS:抱歉我的英语不好,但我是法国人:/

最佳答案

编辑:
好的,我发现 moveToFirst() 需要很长时间,因为它进行实际的数据库通信。你对此无能为力。如果它导致性能问题并阻塞您的 UI,您可以尝试将其移动到 AsyncTask 中。

android cursor movetofirst performance issue

你的 table 有多大?您可以尝试将索引添加到 idfs 并检查它是否有所不同。


我确定 System.out.println 会花费很多时间。所以试试这个:

public int getCountNameContainWord(String word){
long time1 = System.currentTimeMillis();
long time2, time3 = 0;
Cursor cur = bdd.query(TABLE_IDF, new String[] {"COUNT(idfs)"}, "idfs LIKE '"+word+"%'", null, null, null, null, null);
time2 = System.currentTimeMillis();
if(cur!=null){
cur.moveToFirst();
time3 = System.currentTimeMillis();
int i=Integer.parseInt(cur.getString(0));
System.out.println("time query : "+(time2-time1));
System.out.println("time move cursor : "+(time3-time2));
return i;
}else{
return 0;
}
}

关于android - Android 中的游标(SQLite),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10383770/

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