powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Java JDBC\PreparedStatement передача аргумента.
6 сообщений из 6, страница 1 из 1
Java JDBC\PreparedStatement передача аргумента.
    #38939683
BogdanSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите плз.
Мне нужно удалять из таблицы строку. Название таблицы я получаю отдельно.
У меня есть две идеи но не одна не работает.

Выбрасывает с ошибкой, что не найдено word(Но если указать word в кавычках "" то сработало бы, только я не знаю как их добавить в String sql).
Код: java
1.
2.
3.
4.
Statement statement = conn.createStatement();
String sql = "DELETE FROM [%s] WHERE EN = [%s]";
sql = String.format(sql, bName, word);
statement.executeUpdate(sql);



Тут почему-то не вообще не принимает аргументы 1 и 2.
Код: java
1.
2.
3.
4.
5.
String sql2 = "DELETE FROM ? WHERE EN = ?";
PreparedStatement preparedStatement = conn.prepareStatement(sql2);
preparedStatement.setString(1,bName);
preparedStatement.setString(2,word);
preparedStatement.executeUpdate();



Решил проблему так: "DELETE FROM " + bName +" WHERE EN = [%s]"
Но все же хотелось бы узнать почему не работает второй вариант с "preparedStatement"?
...
Рейтинг: 0 / 0
Java JDBC\PreparedStatement передача аргумента.
    #38939684
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BogdanSh,

В первом случае, строковые литералы заключаются в одинарные кавычки, а не квадратные скобки или двойные кавычки.
...
Рейтинг: 0 / 0
Java JDBC\PreparedStatement передача аргумента.
    #38939688
BogdanSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLAD,

Действительно. Работает. Спасибо. Дело в том, ранее я создавал таблицу и для создания таблицы с числовым именем его надо было указывать в квадратных кавычках[]. Вот я и подумал...точнее не подумал...
...
Рейтинг: 0 / 0
Java JDBC\PreparedStatement передача аргумента.
    #38939704
MrCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я понимаю, имя таблицы не может быть параметром запроса. Запрос, перед исполнением, нужно скомпилировать, а для этого нужно точно знать имя таблицы - чтобы построить план исполнения, проверить наличие полей в таблице, и т.д. Т.е. имя таблицы должно быть известно до компиляции. А параметры становятся доступными для присваивания только после компиляции.
...
Рейтинг: 0 / 0
Java JDBC\PreparedStatement передача аргумента.
    #38939705
MrCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
... потому второй вариант и не работает.
...
Рейтинг: 0 / 0
Java JDBC\PreparedStatement передача аргумента.
    #38939725
BogdanSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrCat,

Да вы правы идет обращение к базе до указания имени таблицы из-за этого и ошибка. Вывод лучше использовать String. format . из java doc:
"If the driver supports precompilation, the method <code>prepareStatement</code> will send the statement to the database for precompilation."
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Java JDBC\PreparedStatement передача аргумента.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]