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

Gab*_*adu 0 sqlite android

我正在尝试查询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;
    }
Run Code Online (Sandbox Code Playgroud)

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

zap*_*apl 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();
}
Run Code Online (Sandbox Code Playgroud)

如果你想使用whereArgs你必须有相同数量的?where为你的项目whereArgs

whereArgs将替换?最终的数据库查询

String where = "name = ? OR name = ?";
String[] whereArgs = new String[] {
    "Peter",
    "Jim"
};
Run Code Online (Sandbox Code Playgroud)

这导致name = 'Peter' OR name = 'Jim'了查询.

顺便说一句:不要catch(NullPointerException e)- 让你的代码安全,这样就不会发生