kotlin - 如何通过 Kotlin 在 Redshift JDBC PreparedStatement 中使用和设置数组
问题描述
我有一个使用 Redshift JDBC PreparedStatement 的 Kotlin 代码,但参数似乎没有正确插入到语句中。当我通过它插入.replace("?", "something")
时。
此代码不起作用(我正在使用准备好的语句并设置数组):
val existingContacts =
redshiftClient.prepareStatement(
"SELECT contact_id, email FROM some.table WHERE email IN (?)"
)
.use { ps ->
ps.setArray(1, redshiftClient.createArrayOf("VARCHAR", dataToInsert.mapNotNull { it["email"] }.toTypedArray()))
ps.executeQuery().use { rs ->
mutableListOf<Pair<String, Map<String, String?>>>().apply {
while (rs.next()) {
add(rs.getString("contact_id") to dataToInsert.first { d -> d["email"] == rs.getString("email") })
}
}
}
}
此代码正在工作(我自己插入数组):
val existingContacts =
redshiftClient.prepareStatement(
"SELECT contact_id, email FROM some.table WHERE email IN (?)"
.replace(
"?",
dataToInsert.mapNotNull { it["email"] }.joinToString(
separator = "','",
prefix = "'",
postfix = "'"
)
)
)
.use { ps ->
ps.executeQuery().use { rs ->
mutableListOf<Pair<String, Map<String, String?>>>().apply {
while (rs.next()) {
add(rs.getString("contact_id") to dataToInsert.first { d -> d["email"] == rs.getString("email") })
}
}
}
}
如果我使用另一个 SQL 查询,例如SELECT contact_id, email FROM some.table WHERE email IN ?
(不带括号?
),我得到一个错误:
java.sql.SQLException: [Amazon](500310) Invalid operation: syntax error at or near "$1"
Position: 63;
你看到错误的位置了吗?
无论如何,您知道我如何使用 Redshift JDBC 打印 PreparedStatement 吗?println(ps.toString())
不工作,实施了吗?
谢谢,
解决方案
推荐阅读
- c# - 如何使用 EditText 字段(纯文本)的输入在服务器上编写/创建文本文件?
- redux - 为什么 rxjs 史诗不起作用?
- php - While 循环内部的 If 循环导致无限循环
- r - 按组聚合并将列添加到 R 中的数据框
- php - 保护所有文件夹和文件内容,但可以访问网站 wordpress
- javascript - 使用 javascript 为字符串数组的所有元素添加前缀,无需迭代(.map() 或循环)
- java - 在 Windows 中使用 Apache Tomcat 7 运行 Jasper Report 时出错
- java - 文件解释/填充不正确
- c++ - 代码错误:“不是非静态数据成员或基类”
- python - 如何避免 sdl2.SDL_Event().window.windowID 始终返回值 2?