我试图让这种查询(我使用postgres)工作:
select * from users where user_id in [1,2,3]
唯一的问题是查询无法使用此类[1,2,3]列表 它仅适用于此类(1,2,3)。
我试图将列表[1,2,3]转换为列表(1,2,3) 但是在Kotlin它没有让我这么做..
我很乐意帮忙。
答案 0 :(得分:1)
如果可能,最好使用预准备语句而不是动态生成的SQL字符串。表达式con.createArrayOf("INTEGER", array)
应该适用于PostgreSQL:
val array = arrayOf(1, 2, 3)
/*
* Or:
* val data = listOf(1, 2, 3)
* val array = data.toTypedArray()
*/
val con = getConnection()
val stmt = con.prepareStatement("select * from users where user_id in ?")
stmt.setArray(1, con.createArrayOf("INTEGER", array))
val rs = stmt.executeQuery()
答案 1 :(得分:0)
您可以创建一个扩展函数将列表转换为字符串(1,2,3)
fun List<Int>.toParenthesis() = this.joinToString(separator = ",", prefix = "(", postfix = ")")
用法:
"select * from users where user_id in ${listOf(1,2,3).toParenthesis()}"