Android中的光标(SQLite)

时间:2012-04-30 12:32:33

标签: android performance sqlite cursor

我在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;
    }
}

结果:

  

时间查询:3

     

时间移动光标:3784

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

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

2 个答案:

答案 0 :(得分:1)

<强> 编辑:
好的,我发现moveToFirst()需要很长时间,因为它会进行实际的数据库通信。你无能为力。如果它导致性能问题并阻止您的用户界面,您可以尝试将其移至AsyncTask

android cursor movetofirst performance issue

你的桌子有多大?您可以尝试将索引添加到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;
    }
}

答案 1 :(得分:1)

我认为答案是Why Cursor Operation is taking so much time,我引用

  好吧,大家好,我没有来过这里的日子。我找到了解决方案,你必须为你的表创建索引,这将提高查询速度。