android - 使用括号和 ? Android中的SQLite数据库查询()

标签 android mysql

我正在尝试使用 query() 函数在 Android 中的 SQLiteDatabase 上执行查询。我想在 SelectionArgs[] 中传递参数,但是当我使用 IN 语句时,它似乎没有替换“?”具有正确的论点。

我的查询如下所示:

temp = database.query(TABLE_NAME_ENTRIES, 
                new String[] {"_id", "Entry", "Summary"}, 
                "_id IN ( ? )",
                new String[] {ids}, null, null, null);

结果是一个空的光标。调试给我的信息是执行的查询使用了语句“_id IN (?)”,表明它似乎没有替换“?”正如预期的那样。当我将查询更改为

temp = database.query(TABLE_NAME_ENTRIES, 
                new String[] {"_id", "Entry", "Summary"}, 
                "_id IN ( " + ids + " )",
                null, null, null, null);

相反,我得到了预期的结果。

我在这个问题上真的很愚蠢,你知道我做错了什么吗?

最佳答案

您可以使用这样的解决方法 - 创建一个使用 ?, 动态生成字符串的方法,并将其放入查询中,如下所示:

String[] ids = { "id1", "id2" }; // do whatever is needed first
String query = "SELECT * FROM table"
+ " WHERE _id IN (" + makePlaceholders(ids.length) + ")";
Cursor cursor = mDb.rawQuery(query, ids);


String makePlaceholders(int len) {
    if (len < 1) {
        // It will lead to an invalid query anyway ..
       throw new RuntimeException("No placeholders");
    } else {
        StringBuilder sb = new StringBuilder(len * 2 - 1);
        sb.append("?");
        for (int i = 1; i < len; i++) {
            sb.append(",?");
        }
        return sb.toString();
    }
}

附注我认为您的查询中问号前后的空格可能是错误的,但我没有测试它,所以我不能 100% 确定

关于android - 使用括号和 ? Android中的SQLite数据库查询(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30365392/

相关文章:

php - 自动将mysql错误和其他错误发送到日志文件的方法?

java - 无法将空日期值插入 mysql

java - 将图像从 Android 设备发送到服务器进行处理并将结果发回的最佳方式是什么?

java - 为什么 AsyncTask 不适合长时间运行的操作

java - 如何去除wav文件中的噪音?

php - 如何在不连接数据库的情况下创建 MySQL 准备语句字符串

javascript - 从选择框中获取所有选项 NOT MULTIPLE 并将它们传递给 php 以插入 mysql

mysql - 非常慢的 mysql 查询 : left join multiple table and where clause for each table

android - 使用 "Google Play Game Services"播放时突然断开连接

java - 如何将日志发送到 JSON Web 服务?