#java #oracle #insert
#java #Oracle #вставить
Вопрос:
Есть идеи, почему это не работает?
В имени таблицы есть TESTTABLE
только один столбец с именем TEST_COLUMN
, который является первичным ключом. Я уверен, что это что-то глупое, но подумал, что спрошу. Я уже подключен к базе данных, поэтому я не беспокоился о предоставлении этого кода
Statement statement = connection.createStatement();
String test = "test";
statement.executeUpdate("INSERT INTO TESTTABLE (TEST_COLUMN) VALUES (" test ")");
выдает мне эту ошибку
ORA-00984: column not allowed here
Ответ №1:
Я предполагаю, что это столбец varchar, поэтому попробуйте:
statement.executeUpdate("INSERT INTO TESTTABLE (TEST_COLUMN) VALUES ('" test "')");
Обратите внимание на одинарные кавычки вокруг данных.
Комментарии:
1. Одинарные кавычки определенно решили проблему с головой. @auwall Вам следует изучить возможность использования
PreparedStatement
s , чтобы избежать внедрения SQL.2. @auwall: Символьные константы данных в Oracle должны быть заключены в одинарные кавычки, что вы и предоставляете Oracle этим утверждением. Вообще говоря, построение динамических операторов таким образом в Oracle — плохая идея, как по причине состояний @pickypg, так и из-за проблем с производительностью. Вы должны использовать переменные привязки, когда это возможно.
3. хорошо, я сейчас этим займусь. однако вопрос. Я получил инструкцию из connection.createStatement(); Как мне получить PreparedStatement?
4. @auwall: Из того же соединения. Просто вызовите prepareStatement().
5. Спасибо, еще 20 минут назад я никогда не использовал ничего подобного, и теперь это работает идеально.