绑定或列索引超出范围,查询sqlite android表错误

时间:2012-03-21 01:49:30

标签: android sqlite

我正在尝试对sqlite android进行查询,以查看表中存在给定用户名的用户数量。 这是我的功能。我必须指定“getContentResolver()!= null”,因此是变量名。

private int findSelectedUser(String name) {
        int count = 0;

        try {
            String[] whereArgs = new String[] {name};
            String[] PROJECTION = new String[] { MyProvider.SETTINGS_USERNAME };
            Cursor c = getContentResolver().query(MyProvider.SETTINGS_URI,
                    PROJECTION, MyProvider.SETTINGS_USERNAME , whereArgs, null);
            if (c != null) {
                count = c.getCount();
                c.close();
            }
        } catch (NullPointerException e) {

        }
        System.out.println("Found something? " + count);
        return count;
    }

跑完后我收到了主题的错误......但是没有得到它。在我的where子句中,我有一列,在我的where参数中有一个值。 请帮我看一下这个,谢谢。

1 个答案:

答案 0 :(得分:9)

我猜这有效:

String[] whereArgs = new String[] {name};
String[] PROJECTION = new String[] { MyProvider.SETTINGS_USERNAME };
Cursor c = getContentResolver().query(MyProvider.SETTINGS_URI,
        PROJECTION, MyProvider.SETTINGS_USERNAME + "=?" , whereArgs, null);
if (c != null) {
    count = c.getCount();
    c.close();
}

如果您想使用whereArgs,则必须在?中拥有与wherewhereArgs相同数量的whereArgs

?将替换最终数据库查询中的String where = "name = ? OR name = ?"; String[] whereArgs = new String[] { "Peter", "Jim" };

name = 'Peter' OR name = 'Jim'

会导致查询catch(NullPointerException e)

顺便说一下:不要{{1}} - 让您的代码安全无法发生