【问题标题】:Android sqlite return number of rows from queryAndroid sqlite从查询返回行数
【发布时间】:2013-06-01 19:11:40
【问题描述】:

我正在尝试构建一种方法来确定用户在插入之前是否存在于 Android sqlite 数据库中,我尝试构建此方法以返回行数,但是如果我尝试搜索类似这样的匹配项

    String[] columns = new String[] { SCREEN_NAME, NAME, PROFILE_IMAGE_URL,
            USER_ID };
    Cursor c = friendsDatabase.query(DATABASE_TABLE, columns, SCREEN_NAME
            + " LIKE '" + screenName + "%'", null, null, null, null);
    c.moveToFirst();
    Integer count= c.getCount();
    c.close();

    return count;

我得到返回的行数没有问题,但是当我寻找这样的完全匹配时

String[] columns = new String[] { SCREEN_NAME, NAME, PROFILE_IMAGE_URL,
            USER_ID };
    Cursor c = friendsDatabase.query(DATABASE_TABLE, columns, SCREEN_NAME
            + " = '" + screenName + "'", null, null, null, null);
    c.moveToFirst();
    Integer count= c.getCount();
    c.close();

    return count;

无论是否匹配,我每次都会得到 0 行,我不确定我的 SQL 是否有问题,或者我使用错误的参数来生成语句,任何帮助都会有很大帮助,谢谢

【问题讨论】:

  • 你为什么要使用 LIKE?您的 LIKE 查询正在寻找前缀匹配,而不是像 = 这样的完整匹配。您最好在屏幕名称列上添加适当的唯一约束并捕获异常。
  • 我使用 LIKE 作为我得到的东西的一个例子,我需要的是为完全匹配返回的行数,但是我似乎无法让它在第二个例子中工作
  • 你的数据库中有那个网名吗?数据库中的屏幕名称和您要查询的名称是否只是大小写不同?

标签: android sql sqlite select rows


【解决方案1】:

试试这个代码,它可能会工作

使用原始查询

Cursor mCount= db.rawQuery("select count(*) from "+ DATABASE_TABLE +" where "+SCREEN_NAME+"='" + SCREEN_NAME + "'", null);
mCount.moveToFirst();
int count= mCount.getInt(0);
mCount.close();

或使用相同的代码但不同

db.query(DATABASE_TABLE , columns, SCREEN_NAME=?, new String[] { SCREEN_NAME}, null, null, null);
c.moveToFirst();
Integer count= c.getCount();
c.close();

【讨论】:

    猜你喜欢
    • 2017-03-27
    • 1970-01-01
    • 2014-09-27
    • 2017-11-30
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    相关资源
    最近更新 更多