【问题标题】:how to filter a search in the database by specific column?如何按特定列过滤数据库中的搜索?
【发布时间】:2019-06-04 00:53:38
【问题描述】:

我正在尝试过滤 sqlite 中的搜索。我想只选择列中具有特定参数的行。

使用下面的代码,我通过函数queueAll()构造的数组得到所有行的返回

有趣的 readFileFromSQLite(): ArrayList {

    var fileName = ArrayList<String>()

    var cursor = queueAll()

    if (cursor.moveToFirst()) {
        while (!cursor.isAfterLast) {
            //val name = cursor.getString(cursor.getColumnIndex(countyname))
            var message_uuid = cursor.getString(cursor.getColumnIndex(COL_y1))
            var message_time = cursor.getString(cursor.getColumnIndex(COL_y2))
            var message_from = cursor.getString(cursor.getColumnIndex(COL_y3))
            var message_to = cursor.getString(cursor.getColumnIndex(COL_y4))
            var message_subject = cursor.getString(cursor.getColumnIndex(COL_y5))
            var message_body = cursor.getString(cursor.getColumnIndex(COL_y6))

            fileName.add(message_body)
            cursor.moveToNext()
        }



        }
        cursor.close()

    return fileName
}

fun queueAll(): Cursor {
    val columns = arrayOf<String>("message_uuid", "message_time","message_from","message_to","message_subject","message_body")
    val db = readableDatabase

    val comp = "comprimido"
    return db.query(CHAT, columns,  null, null, null, null, null)
  //  return db.rawQuery("select * from CHAT where message_from=web_anon , null);
}

现在,我只想提取具有特定字符串的 message_from 列的行。我的尝试: return db.rawQuery("select * from CHAT where message_from = web_anon, null) 返回错误

【问题讨论】:

  • 如果 message_from==anon 在 filename.add 前面,你不能添加吗?我的意思是你甚至不说错误是什么以及你把那条线放在哪里,所以这是我能做的最好的。
  • 如果字符串实际上是“web_anon”,你应该把它用单引号括起来。
  • 感谢@IcedLance 和 Giorgos。这两种形式都有效。我将使用第二个选项,已经在数据库中选择了我想要的数据,使用 Giorgos 建议的单引号。

标签: android kotlin


【解决方案1】:

工作。正确的选择是:

return db.rawQuery("select * from CHAT where message_from= 'web_anon' , null) 参数带有单引号。

第二个选项是添加这个条件:if (message_from==web_anon) { filename.add(message_body)}

【讨论】:

    【解决方案2】:

    推荐使用rawQuery()的方式是这样的:

    db.rawQuery("select * from CHAT where message_from= ?" , arrayOf("web_anon"))
    

    第二个参数是传递给第一个参数的字符串数组,第一个参数是查询本身,每个 ? 占位符被数组中的每一项替换。
    这样您就不必担心列的数据类型,并且也是 sql-injection 安全的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-04
      • 2019-12-04
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多