Ответ 1
Вы не можете. Вам нужно сконструировать sql со строкой конкатенации/заполнителем с помощью String.format. подготовленный оператор предназначен для значений столбцов, а не для имени таблицы.
Я использую объект Java PreparedStatment для построения серии пакетных запросов INSERT. Запрос запроса имеет формат...
String strQuery = "INSERT INTO ? (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);";
... поэтому оба значения поля и имя таблицы являются переменными (т.е. у меня есть несколько таблиц с одинаковым форматом столбцов, для которых каждая вставка будет направлена на другую). Я могу заставить выполнение работать, если я удалю "?" tablename variable и hard code, но каждый подготовленный оператор будет вставлен в другую таблицу, поэтому необходимо сохранить переменную, которую я заполняю непосредственно перед выполнением пакетного запроса, используя...
stmt.setString(1, "tableName1");
Как я могу позволить этому быть динамической переменной?
Вы не можете. Вам нужно сконструировать sql со строкой конкатенации/заполнителем с помощью String.format. подготовленный оператор предназначен для значений столбцов, а не для имени таблицы.
Вы можете использовать placeholder вместо имени таблицы, а затем заменить это на свое имя-табло.
String strQuery = "INSERT INTO $tableName (col1, col2, col3, col4, col5)
VALUES (?,?,?,?,?,?);";
и замените, когда u узнает имя_таблицы
String query =strQuery.replace("$tableName",tableName);
stmt =conn.prepareStatement(query);
Имя таблицы не может использоваться как параметр. Он должен быть жестко закодирован. Попробуйте что-то вроде:
String tableName = "tableName1";
String strQuery = "INSERT INTO " + tableName + " (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);";
Один вариант может быть String.format
:
например.
String sql = String.format("INSERT INTO $1%s (col1, col2, col3, (etc)", myTablename);
Вам нужно добавить его в исходную строку:
String tableName = "some_table_name";
// some other code
String strQuery = "INSERT INTO " + tableName + " (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);";
Вам нужна точка с запятой в strQuery? (вы можете это сделать, это выглядит немного странно для меня: -))