Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SQL, в сервлетах 
:(
    Опции темы
Vlad
  Дата 12.3.2003, 03:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered












Никак не могу понять почему в данном сервлете в строке
statement.executeQuery("INSERT INTO table2 VALUES(make, model)" );
Strings make and model, не загоняются в базу данных?
Если ставлю одиночные кавычки, все приходит в норму.
statement.executeQuery("INSERT INTO table2 VALUES('make',' model')" );
Спасибо




public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doPost(request,response);
}

public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {


Connection con = null;

make = request.getParameter("make");
model = request.getParameter("model");





try {

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
con = DriverManager.getConnection("jdbc:odbc:auto");
if (con !=null) {
Statement statement = con.createStatement();


statement.executeQuery("INSERT INTO table2 VALUES(make,model)" );





}//close if
}//close try
catch (SQLException sqle) {
System.err.println(sqle.getMessage());
}
catch (ClassNotFoundException cnfe) {
System.err.println(cnfe.getMessage());
}
catch (Exception e) {
System.err.println(e.getMessage());
}

finally {
try {
if (con != null) {
con.close();
}
}
catch (SQLException sqle) {
System.err.println(sqle.getMessage());
}
}
  Вверх
AntonSaburov
Дата 12.3.2003, 03:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата
Никак не могу понять почему в данном сервлете в строке
statement.executeQuery("INSERT INTO table2 VALUES(make, model)" );
Strings make and model, не загоняются в базу данных?
Если ставлю одиночные кавычки, все приходит в норму.
statement.executeQuery("INSERT INTO table2 VALUES('make',' model')" );
Спасибо


Во-первых, лучше для INSERT, UPDATE, DELETE использовать
executeUpdate - это правильнее.

А во-вторых, в кавычки обязательно надо ставить - это же строковые значения. И на SQL команда именно с кавычками и посылается. Так что здесь никаких странностей нет.
PM MAIL WWW ICQ   Вверх
Vlad
Дата 12.3.2003, 03:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











если клиент отсылает параметры сервлету, двум стрингам model & make я присваиваю эти значения, как теперь эти стринги засунуть в SQL запрос.
еще раз спасибо....
  Вверх
SmaLL
Дата 12.3.2003, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 557
Регистрация: 17.12.2002
Где: Voronezh

Репутация: 1
Всего: 2



Цитата(Vlad @ 11.3.2003, 19:49)
если клиент отсылает параметры сервлету, двум стрингам model & make я присваиваю эти значения, как теперь эти стринги засунуть в SQL запрос.
еще раз спасибо....

Т.е. тебе нужен параметризованный запрос?
Тогда используй preparedStatement.


--------------------
Что ни делается - всЁ к лучшему! SmallWeb
Мой адрес не дом и не улица, мой адрес родной пивзавод!
PM MAIL WWW ICQ   Вверх
AntonSaburov
Дата 12.3.2003, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата
Т.е. тебе нужен параметризованный запрос?
Тогда используй preparedStatement.


IMHO - это наиболее удобное и правильное решение.

Или в конце концов делай конкатенацию строк, но не забудь добавить кавычки.
Что-то типа
"INSERT INTO T1 (A,B) VALUES(' "+value2+" ',' "+value1+" ')"

Видно плохо, поэтому я ординарные кавычки отделил пробелом, но только, чтобы их было видно.
PM MAIL WWW ICQ   Вверх
Vlad
Дата 12.3.2003, 20:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered












Попробовал сделать, подобным образом и в базу записываются значения null.

statement.executeUpdate("INSERT INTO table2 VALUES(' "+make+" ',' "+model+" ' )" );


  Вверх
AntonSaburov
Дата 12.3.2003, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата
statement.executeUpdate("INSERT INTO table2 VALUES(' "+make+" ',' "+model+" ' )" );


Список полей, как я понимаю, не нужен. У тебя всего два поля в таблице.

А ты перед отправкой не смотрел, что за строка у тебя формируется ?
Ты ее сначала сформируй, напечатай. И проверь.

Потому как странно сие - должно все нормально работать.
PM MAIL WWW ICQ   Вверх
Vlad
Дата 12.3.2003, 21:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Огромное спасибо!
Все заработало.
Сам лоханулся с подачей от клиента.
  Вверх
Vlad
Дата 13.3.2003, 03:59 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Антон еще один вопрос (Прости если я тебя задолбал)
Cтроки джавы мы записываем в sql вышеупомянутым способом:
statement.executeUpdate("INSERT INTO table2 VALUES(' "+value1+" ',' "+value2+" ' )" );
а как записать имя переменной “a”, допустим int a = 567;

  Вверх
AntonSaburov
Дата 13.3.2003, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Тебе повезло, что я просматриваю все сообщения в разделе - в будущем, пожалуйста, не нарушай правила.

Один вопрос - одна тема

Т.е. для следующего вопроса начинай новую тему. Это больше нужно именно тем, кто спрашивает - можно просто перестать заходить в ту тему, где уже по идее все закончилось.

Цитата
а как записать имя переменной “a”, допустим int a = 567;


Я не очень понял вопрос. Если ты хочешь запрос использовать много раз и только подставлять параметры - то используй preparedStatement

Connection con = ...;

PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00);
pstmt.setInt(2, 110592);


А если просто сформировать строку - то

statement.executeUpdate("INSERT INTO table2 VALUES("+value1+","+value2+")" );

В смысле не использовать кавычки вообще, только строки закрывать, а JAVA сама преобразует целое в строку и у тебя получится обычный SQL-запрос
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.