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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с JDBC 
V
    Опции темы
Сириус
Дата 25.12.2006, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 26.11.2005

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



У меня есть страничка, откуда с помощью Ajax-тезнологии происходит запрос к сервлету.
В этом сервлете есть код
Код

Class.forName("com.mysql.jdbc.Driver");
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/chatdb","root","root");
        statement = connection.createStatement();    
        sName=request.getParameter("nickname");
        query="INSERT INTO mess (login) VALUES ('" + sName + "')";
        resultSet=statement.executeQuery(query);

Вот. Но по всей видимости программа не может выполнить этот код. Хотя все нормально компилируется, без ошибок, и по идее все должно было работать, но никаких записей не добавляется и где-то там застревает процесс, это я понял по результатам из функции Ajax
Вот http_request.onreadystatechange, это происходит дважды, и все. Результат никогда не равняется 4.
http_request.readyState == 4 ..вот это условие нормального завершения не выполняется. Значит где-то что-то не то.

Хотя оператор SELECT например работает. Может быть какой-то запрет на запись в базах данных?

Вот такая странная весьма тупиковая ситуация.

Это сообщение отредактировал(а) Сириус - 25.12.2006, 01:21
PM MAIL   Вверх
Сириус
Дата 25.12.2006, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 26.11.2005

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



Попробовал методом executeUpdate, но он для INSERT не помог, хотя UPDATE получился.
Странно..
PM MAIL   Вверх
tux
Дата 25.12.2006, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



А описание какие ошибки выдает сервлет будет? Или нам начинать строить логическую цепь из 117 предположений что же могло произойти?
PM MAIL Skype GTalk Jabber YIM   Вверх
Сириус
Дата 25.12.2006, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 26.11.2005

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



Ошибок не выдает сервлет.
PM MAIL   Вверх
batigoal
Дата 25.12.2006, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

Репутация: 16
Всего: 151



Цитата(Сириус @  25.12.2006,  02:35 Найти цитируемый пост)
Попробовал методом executeUpdate, но он для INSERT не помог, хотя UPDATE получился.

Должен работать.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
tux
Дата 25.12.2006, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Подозреваю, что на поле login стоит unique constraint и имеет место быть попытка вставить дублирующиеся записи, поэтому update работает, а insert нет. Ждем подробностей.
PM MAIL Skype GTalk Jabber YIM   Вверх
tux
Дата 25.12.2006, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Цитата(Сириус @  25.12.2006,  13:27 Найти цитируемый пост)
Ошибок не выдает сервлет. 

Ситуация когда все работает, но запись не вставляется в таблицу, невозможна по определению, правильно? Если конечно не вмешались потусторонние силы. Ну тогда кому как не нам, телепатам, с ними бороться. И так.

Вариант первый. СУБД не отрабатывает INSERT. Крайне маловероятно, хотя смотря что за СУБД.

Вариант второй. AJAX-приложение не отправляет запрос серверу. Тоже маловероятно. Как это, при UPDATE отправляет, а при INSERT нет. Хотя все возможно. Проверь, вызывается ли сервлет.

Вариант третий. В сервлете не происходит фиксация транзакции, правда опять-таки почему-то только при INSERT. Если установлен autoCommit, то такой вариант не подходит. Проверь код - фиксируется ли транзакция. 

Вариант четвертый, заключительный. Сервлет вываливает таки исключение, но ты его перехватываешь и ничего не печатаешь, например. 

Еще один вариант описан выше. Остальные 112 возможных случаев описывать пока не буду.
PM MAIL Skype GTalk Jabber YIM   Вверх
Сириус
Дата 26.12.2006, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 26.11.2005

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



tux я разве сказал что все работает? Если ошибок не выдется, это еще не значит что все работает, так что пока про потусторонние силы забудь. Я нашел проблему, выложу, может будет интересно.

В запросе на INSERT не были задействованны некоторые поля таблицы, которые не имели значений default. Поэтому INSERT не работал. А если в SQLyog просто ввести тот же запрос (не через джава, а прямо), то все работает, поэтому я думал что через Джава тоже должно работать. Вот такие тонкости.
В Php тоже работает, а в Джава так нельзя, поля которые не указываются, должны иметь значение default (или скажем Auto Increment ).
PM MAIL   Вверх
tux
Дата 26.12.2006, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



В SQLyog работает, в PHP работает, в Java не работает, но ошибок не выдает. Не забуду я про потусторонние силы - не бывает так. Либо драйвер JDBC молча проглатывает некорректные команды (маловероятно) либо твой код где-то проглатывает ошибки. В общем, разберись со своим кодом, иначе еще много чудес увидишь. Либо драйвер замени.
PM MAIL Skype GTalk Jabber YIM   Вверх
Сириус
Дата 27.12.2006, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 26.11.2005

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



Не правильный запрос должен всегда выдавать ошибку...?......
tux, пусть будет так 
"В SQLyog работает, в PHP работает, в Java не работает" 
без " но ошибок не выдает"...
PM MAIL   Вверх
batigoal
Дата 27.12.2006, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

Репутация: 16
Всего: 151



Цитата(Сириус @  27.12.2006,  02:45 Найти цитируемый пост)
Не правильный запрос должен всегда выдавать ошибку...?......

Да, SQLException.


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

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

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


 




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


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

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