Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Проблемы с JDBC


Автор: Сириус 25.12.2006, 00:31
У меня есть страничка, откуда с помощью 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:35
Попробовал методом executeUpdate, но он для INSERT не помог, хотя UPDATE получился.
Странно..

Автор: tux 25.12.2006, 08:28
А описание какие ошибки выдает сервлет будет? Или нам начинать строить логическую цепь из 117 предположений что же могло произойти?

Автор: Сириус 25.12.2006, 13:27
Ошибок не выдает сервлет.

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

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

Автор: tux 25.12.2006, 13:48
Подозреваю, что на поле login стоит unique constraint и имеет место быть попытка вставить дублирующиеся записи, поэтому update работает, а insert нет. Ждем подробностей.

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

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

Вариант первый. СУБД не отрабатывает 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
Цитата(Сириус @  27.12.2006,  02:45 Найти цитируемый пост)
Не правильный запрос должен всегда выдавать ошибку...?......

Да, SQLException.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)