如何按特定列过滤数据库中的搜索?

时间:2019-06-03 15:47:47

标签: android kotlin

我正在尝试过滤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列并带有特定字符串的行。我的尝试: 返回db.rawQuery(“从CHAT中选择*,其中message_from = web_anon,null)会返回错误

2 个答案:

答案 0 :(得分:0)

工作。正确的选择是:

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

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

答案 1 :(得分:0)

推荐使用rawQuery()的方法是:

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

第二个参数是传递给第一个参数(即查询本身)的字符串数组,每个?占位符均由数组的每个项目替换。
这样,您不必担心列的数据类型,并且也可以使用sql-injection安全。