Я выполняю запрос SELECT
, используя JDBC, который сам имеет несколько подзапросов.Один из этих подзапросов возвращает столбец данных, который я затем обрабатываю как ArrayList
.Из-за обработки ошибок я подготавливаю подзапрос и запускаю его отдельно, затем создаю строку Java в виде "(item_1, item_2, ... , item_n)"
.
Обратите внимание, что элементы кортежа являются INTEGERS.
Мой всеобъемлющий запрос имеет вид PreparedStatement
, где я пытаюсь заполнить ?
, используя мой результат подзапроса.
String subqueryResult = "(1, 2, 3)";
// ...
PreparedStatement stmt = connection.prepareStatement("SELECT * FROM table WHERE columnName in ?");
stmt.setString(subqueryResult);
Я получаю ошибку SQL 1064, в которой говорится, что мой запрос выглядит как WHERE columnName in ''(1, 2, 3)'
.
Я понимаю, что буквенные кавычки не сбалансированы, но даже если они сбалансированы, мы не можем выполнить предложение IN
для строки.
Как бы я мог безопасно заполнить PreparedStatement
, чтобы результирующий запрос выглядел как SELECT * FROM table WHERE columnName in (1, 2, 3)
?