| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Проблемы с JDBC |
| Автор: Сириус 25.12.2006, 00:31 | ||
| У меня есть страничка, откуда с помощью Ajax-тезнологии происходит запрос к сервлету. В этом сервлете есть код
Вот. Но по всей видимости программа не может выполнить этот код. Хотя все нормально компилируется, без ошибок, и по идее все должно было работать, но никаких записей не добавляется и где-то там застревает процесс, это я понял по результатам из функции Ajax Вот http_request.onreadystatechange, это происходит дважды, и все. Результат никогда не равняется 4. http_request.readyState == 4 ..вот это условие нормального завершения не выполняется. Значит где-то что-то не то. Хотя оператор SELECT например работает. Может быть какой-то запрет на запись в базах данных? Вот такая странная весьма тупиковая ситуация. |
| Автор: Сириус 25.12.2006, 01:35 |
| Попробовал методом executeUpdate, но он для INSERT не помог, хотя UPDATE получился. Странно.. |
| Автор: tux 25.12.2006, 08:28 |
| А описание какие ошибки выдает сервлет будет? Или нам начинать строить логическую цепь из 117 предположений что же могло произойти? |
| Автор: Сириус 25.12.2006, 13:27 |
| Ошибок не выдает сервлет. |
| Автор: batigoal 25.12.2006, 13:36 | ||
Должен работать. |
| Автор: tux 25.12.2006, 13:48 |
| Подозреваю, что на поле login стоит unique constraint и имеет место быть попытка вставить дублирующиеся записи, поэтому update работает, а insert нет. Ждем подробностей. |
| Автор: tux 25.12.2006, 14:22 |
Ситуация когда все работает, но запись не вставляется в таблицу, невозможна по определению, правильно? Если конечно не вмешались потусторонние силы. Ну тогда кому как не нам, телепатам, с ними бороться. И так. Вариант первый. СУБД не отрабатывает INSERT. Крайне маловероятно, хотя смотря что за СУБД. Вариант второй. AJAX-приложение не отправляет запрос серверу. Тоже маловероятно. Как это, при UPDATE отправляет, а при INSERT нет. Хотя все возможно. Проверь, вызывается ли сервлет. Вариант третий. В сервлете не происходит фиксация транзакции, правда опять-таки почему-то только при INSERT. Если установлен autoCommit, то такой вариант не подходит. Проверь код - фиксируется ли транзакция. Вариант четвертый, заключительный. Сервлет вываливает таки исключение, но ты его перехватываешь и ничего не печатаешь, например. Еще один вариант описан выше. Остальные 112 возможных случаев описывать пока не буду. |
| Автор: Сириус 26.12.2006, 20:37 |
| tux я разве сказал что все работает? Если ошибок не выдется, это еще не значит что все работает, так что пока про потусторонние силы забудь. Я нашел проблему, выложу, может будет интересно. В запросе на INSERT не были задействованны некоторые поля таблицы, которые не имели значений default. Поэтому INSERT не работал. А если в SQLyog просто ввести тот же запрос (не через джава, а прямо), то все работает, поэтому я думал что через Джава тоже должно работать. Вот такие тонкости. В Php тоже работает, а в Джава так нельзя, поля которые не указываются, должны иметь значение default (или скажем Auto Increment ). |
| Автор: tux 26.12.2006, 21:53 |
| В SQLyog работает, в PHP работает, в Java не работает, но ошибок не выдает. Не забуду я про потусторонние силы - не бывает так. Либо драйвер JDBC молча проглатывает некорректные команды (маловероятно) либо твой код где-то проглатывает ошибки. В общем, разберись со своим кодом, иначе еще много чудес увидишь. Либо драйвер замени. |
| Автор: Сириус 27.12.2006, 01:45 |
| Не правильный запрос должен всегда выдавать ошибку...?...... tux, пусть будет так "В SQLyog работает, в PHP работает, в Java не работает" без " но ошибок не выдает"... |
| Автор: batigoal 27.12.2006, 09:03 |
Да, SQLException. |