无法在Kotlin中运行“Where In”查询
我试图让这种查询(我正在与postgres)工作:
select * from users where user_id in [1,2,3]
唯一的问题是查询不能用这种[1,2,3]的列表工作,只能使用这种类型(1,2,3)。
我试图将列表[1,2,3]转换为列表(1,2,3),但在Kotlin它并没有让我这样做..
我会喜欢一些帮助。
如果可能,最好使用预处理语句而不是动态生成的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,2,3)
fun List<Int>.toParenthesis() = this.joinToString(separator = ",", prefix = "(", postfix = ")")
用法:
"select * from users where user_id in ${listOf(1,2,3).toParenthesis()}"