Подтвердить что ты не робот

Как использовать переменную tablename для вставки инструкции Java

Я использую объект Java PreparedStatment для построения серии пакетных запросов INSERT. Запрос запроса имеет формат...

String strQuery = "INSERT INTO ? (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);";

... поэтому оба значения поля и имя таблицы являются переменными (т.е. у меня есть несколько таблиц с одинаковым форматом столбцов, для которых каждая вставка будет направлена ​​на другую). Я могу заставить выполнение работать, если я удалю "?" tablename variable и hard code, но каждый подготовленный оператор будет вставлен в другую таблицу, поэтому необходимо сохранить переменную, которую я заполняю непосредственно перед выполнением пакетного запроса, используя...

stmt.setString(1, "tableName1");

Как я могу позволить этому быть динамической переменной?

4b9b3361

Ответ 1

Вы не можете. Вам нужно сконструировать sql со строкой конкатенации/заполнителем с помощью String.format. подготовленный оператор предназначен для значений столбцов, а не для имени таблицы.

Ответ 2

Вы можете использовать placeholder вместо имени таблицы, а затем заменить это на свое имя-табло.

String strQuery = "INSERT INTO $tableName (col1, col2, col3, col4, col5)
                   VALUES (?,?,?,?,?,?);";

и замените, когда u узнает имя_таблицы

String query =strQuery.replace("$tableName",tableName);
stmt =conn.prepareStatement(query);

Ответ 3

Имя таблицы не может использоваться как параметр. Он должен быть жестко закодирован. Попробуйте что-то вроде:

String tableName = "tableName1";
String strQuery = "INSERT INTO " + tableName + " (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);";

Ответ 4

Один вариант может быть String.format:

например.

String sql = String.format("INSERT INTO $1%s (col1, col2, col3, (etc)",  myTablename);

Ответ 5

Вам нужно добавить его в исходную строку:

String tableName = "some_table_name";
// some other code
String strQuery = "INSERT INTO " + tableName + " (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);";

Вам нужна точка с запятой в strQuery? (вы можете это сделать, это выглядит немного странно для меня: -))