我正在尝试过滤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)会返回错误
答案 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安全。