powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Где ошибка (JDBC)?
29 сообщений из 29, показаны все 2 страниц
Где ошибка (JDBC)?
    #33938101
fidel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему не работает? подскажите пожалуйста

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
  public   boolean  UpdateUserAccount( int   editid,
                                     String firstname,
                                     String lastname,
                                     String nickname){
       boolean  return_udp_Value = false;
      Connection connection =  null ;
      

       try {
        connection = DriverManager.getConnection(dbUrl, dbUserName, dbPassword);
        connection.setAutoCommit(false);
        Statement s = connection.createStatement();
        String sql = "UPDATE Users SET FirstName=" + firstname + " LastName=" + lastname + " NickName=" + nickname + " WHERE Id=" + editid;

          s.executeUpdate(sql);

          s.close();
          connection.commit();
          connection.close();
          return_udp_Value = true;


      } catch (SQLException e){
           try {
              connection.rollback();
              connection.close();
          } catch (SQLException se){}
        }

         return  return_udp_Value;
    }


...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33938140
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
String sql = "UPDATE Users SET FirstName='" + firstname + "' LastName='" +....
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33938141
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если на самом деле происходит исключение, было бы нравственно вывести в консоль StackTrace и привести его здесь.
И учитесь пользоваться параметризированными запросами.
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33938145
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщето в таких случаях удобно пользоваться PreparedStatement
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33938278
fidel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
параметризированными запросами - это что такое?

PreparedStatement - это как?

Сорри что я такой неуч.
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33938808
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
}catch(SQLException se){}
}


так никогда не писать. Кто пишет - тому по башке. Исключение надо обрабатывать, то есть например, как минимум выводить сообщение о его причине:

}catch(SQLException se){
System.out.println ("ошибка тута:" + e.getMessage ());}
}

тогда подобных вопросов станет намного меньше.
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33938981
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fidelпараметризированными запросами - это что такое?

PreparedStatement - это как?

Сорри что я такой неуч.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
 public   boolean  UpdateUserAccount( int   editid,
                                     String firstname,
                                     String lastname,
                                     String nickname){
       boolean  return_udp_Value = false;
      Connection connection =  null ;
       try {
        connection = DriverManager.getConnection(dbUrl, dbUserName, dbPassword);
        connection.setAutoCommit(false);
        String sql = "UPDATE Users SET FirstName=?, LastName=?, NickName=?, 
        WHERE Id=?";
        // Вот так пишутся prepared statements
        PreparedStatement s = connection.prepareStatement(sql);
        s.setString( 1 , firstname);
        s.setString( 1 , lastname);
        s.setString( 1 , nickname);
        s.setInt( 1 , editid);
        s.executeUpdate(sql);
        s.close();
        connection.commit();
        connection.close();
        return_udp_Value = true;
      }
       catch (SQLException e){
          ex.printStackTrace();
           try {
              connection.rollback();
              connection.close();
          } catch (SQLException se){}
        }

         return  return_udp_Value;
    }
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33939092
fidel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман и Partisan M, огромное вам спасибо за советы, обязательно учту. А насчет использования PreparedStatement, я так понял что это делается для более удобного чтения кода или может я что-то неправильно понял? В любом случае спасибо!
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33939243
l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
l
Гость
Роман опечатался, не везде единичка -
Код: plaintext
s.setString( 2 , lastname);
потом 3 и т.д., короче номер подставляемого значения ставь..
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33939252
carper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fidel А насчет использования PreparedStatement, я так понял что это делается для более удобного чтения кода или может я что-то неправильно понял?

Это делается для ускорения повторных запросов, для предотвращения SQL Injection, для более строгой и предсказуемой логики построения запросов ...

Кстати, если я ничего не путаю, то в приведенном вам примере:
s.setString(1, firstname);
s.setString(1, lastname);
s.setString(1, nickname);
s.setInt(1, editid);

случайно вкралась ошибочка, надо:
s.setString(1, firstname);
s.setString(2, lastname);
s.setString(3, nickname);
s.setInt(4, editid);

А connection.rollback(), если при этом ошибка возникла в атомарной транзакции, как в примере, не имеет смысла - по крайней мере, я не могу припомнить ни одной базы данных, которая в этом случае не откатила бы транзакцию сама.
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33939409
парабелум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
s.setString( 2 , lastname);

Здесь цифра 2 это номер подставляемого значения в заросе или номер поля в таблице
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33939449
l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
l
Гость
номер вопросика (?) в твоём preparedStatement, т.е. подставляемого значения..
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33939830
fidel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
млин не работает все равно, может ошибка не в методе UpdateUserAccount? А кто нить проверял этот метод?
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33940023
fidel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понимаю, что уже наверно всех замучал, но воте еще вопрос возник, может я неправильно в jsp, условие пишу:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<jsp:useBean id="dbBean"  class ="com.my.DbBean" scope="application"/>
 <% 
     int  editid = Integer.parseInt(request.getParameter("editid"));
    String editusername = request.getParameter("firstname,");
    String editpassword = request.getParameter("lastname");
    String edituserrole = request.getParameter("nickname");

%>

 <%
      
 if  (dbBean.UpdateUserAccount(editid,lastname,lastname,nickname)){
          out.println("User account is update");
          
         } else {
            out.println("error! user is not update");
          }

  %>

...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33940045
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в чем собственно вопрос?
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33940337
fidel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос собствено в том что не работает выше описаный метод в бине, кто нить его проверить может? может проблема на уровне самой БД?
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33940357
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НЕЛЬЗЯ так использовать бины. В бинах должны быть только set/get методы, для свойств объекта! Все операции с БД долны быть вынесены в отдельный класс.
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33940416
fidel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоН, во многих книгах, (хотя книги конечно не показатель) запросы к БД засовывают в бины. Хорошо допустим я последую Вашему совету, и выкину из бина всю логику, тогда куда мне девать sql запросыб т.е. мою логику? Ну не в сервлеты ни в jsp ее не сунешь, естественно. Куда тогда?
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33940472
maddcast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какой Exception?
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33940539
fidel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Тимон - Сори, немного тупанул в прошлом посте, т.е. я так понял что бины только для хранения параметров, а логику надо просто сувать в отдельные классы - это будет считаться хорошим тоном? Наверно в книгах, что то не так, вот книженция - где приводиться пример MVC и бин состоит практически из одних запросов к БД.

а скачать ее можно:
http://aleria.net/0/0/4/4/3/2/J/f475118e2be9a023fc2de10f7a6d5d26



Exceptiona нет никакого, тока вот на jsp странице выводиться "error! user is not update". см.выше
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33940561
maddcast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может у тебя внутри метода исключение. Попробуй debug, и все вопросы отпадут.
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33940572
l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
l
Гость
а в консоли сервера приложений посмотри exception, должен быть
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33940608
carper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fidel .. во многих книгах, (хотя книги конечно не показатель) запросы к БД засовывают в бины. Хорошо допустим я последую Вашему совету, и выкину из бина всю логику, тогда куда мне девать sql запросыб т.е. мою логику? Ну не в сервлеты ни в jsp ее не сунешь, естественно. Куда тогда?

1. Вообще-то, то что вы используете в примере вполне может быть самым обычным классом, причем тут вообще бин, если нет желания использовать сеттеры и геттеры?
2. Чем вам не понравился сервлет для инкапсуляции логики в контексте примера также абсолютно не ясно.
3. request.getParameter("firstname,") - вот этого при использовании бина вообще быть не должно бы ..., я уж не говорю про загадочную запятую в имени параметра (может это так и было задумано, но сомнительно).
4. За исключением editid, совершенно неясно где вы нашли все остальные переменные - UpdateUserAccount(editid,lastname,lastname,nickname))
(lastname,lastname,nickname - это откуда? Творческое использование имен параметров в качестве переменных?). Вы сами-то пробовали скомпилировать свой пример?
5. В книгах в бины засовывают не столько запросы к базе, сколько входные/выходные параметры.

Послушайте добрый совет - засовывайте GUI в тэги, логику в сервлеты и JSF.
Когда поймете, что именно не нравится в сервлетах, смысл бинов проявится сам собой (если вообще возможностей JSF/аналогов не хватит с головой) - не такое уж это откровение и ничего революционного они не дадут (ну разве что плохо представляю как писать собственные тэги с атрибутами, не используя set and get методы)).
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33940641
carper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, для ясности, я говорил про обычные бины, EJB - это немного другая кухня, заточенная под базы данных.
Вот тут уж, действительно и параметры и сами запросы и т.д. и т.п.
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33940785
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, первоначальный код у него правильный.
Как-то для проверки хотел "напрямую" изменить в таблице базы значение через UPDATE (пользуюсь я OJB, но из-за вопросов кодировок не знал, в какой момент она меняется - грешил на OJB). Не использовал никаких бинов, просто знал, что я меняю, где я меняю и на что я меняю и фактически запрос был одной стринговой строкой (чтобы вы не думали, что ошибка вкралась в формирование строки запроса). Коннект произошел нормально, запрос - нет.

После выпадения exception долго дебаггил. Так вот ошибка происходит на стадии парсинга запроса. Причем хитро: определило первую букву ("U"), взяло из своего списка стринг UPDATE, и при первом же действии trim или split (не помню точно - не буду врать) сработало exception. Причем именно SQLException.

Видимо, существуют дополнительные рамки выполнения запроса UPDATE функциями statement.execute или statement.executeUpdate.

Так что дело тут не в коде. Вернее, в специфическом использовании кода ... :)
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33940863
fidel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кувалдин Роман fidelпараметризированными запросами - это что такое?

PreparedStatement - это как?

Сорри что я такой неуч.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
 public   boolean  UpdateUserAccount( int   editid,
                                     String firstname,
                                     String lastname,
                                     String nickname){
       boolean  return_udp_Value = false;
      Connection connection =  null ;
       try {
        connection = DriverManager.getConnection(dbUrl, dbUserName, dbPassword);
        connection.setAutoCommit(false);
        String sql = "UPDATE Users SET FirstName=?, LastName=?, NickName=?, 
        WHERE Id=?";
        // Вот так пишутся prepared statements
        PreparedStatement s = connection.prepareStatement(sql);
        s.setString( 1 , firstname);
        s.setString( 1 , lastname);
        s.setString( 1 , nickname);
        s.setInt( 1 , editid);
        s.executeUpdate(sql);
        s.close();
        connection.commit();
        connection.close();
        return_udp_Value = true;
      }
       catch (SQLException e){
          ex.printStackTrace();
           try {
              connection.rollback();
              connection.close();
          } catch (SQLException se){}
        }

         return  return_udp_Value;
    }



почему то у меня подсвечивает красным буквы ex в строке
Код: plaintext
ex.printStackTrace();
- Идея пишет, что типа Cannot resolve symbol 'ex'. Что это за преременная и что эта строка вообще делает
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33940933
niinu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
catch(SQLException e){
        ex.printStackTrace();

ex == e
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33941079
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fidelПонимаю, что уже наверно всех замучал, но воте еще вопрос возник, может я неправильно в jsp, условие пишу:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<jsp:useBean id="dbBean"  class ="com.my.DbBean" scope="application"/>
 <% 
     int  editid = Integer.parseInt(request.getParameter("editid"));
    String editusername = request.getParameter("firstname,");
    String editpassword = request.getParameter("lastname");
    String edituserrole = request.getParameter("nickname");

%>

 <%
      
 if  (dbBean.UpdateUserAccount(editid,lastname,lastname,nickname)){
          out.println("User account is update");
          
         } else {
            out.println("error! user is not update");
          }

  %>



У тебя переменные объявлены как editusername и т.д. а в метод ты передаешь что? (editid,lastname,lastname,nickname) - где объявлены?

П.С. в своих исходниках был невнимателен, каюсь :-)
...
Рейтинг: 0 / 0
Где ошибка (JDBC)?
    #33941090
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fidelпочему то у меня подсвечивает красным буквы ex в строке
Код: plaintext
ex.printStackTrace();
- Идея пишет, что типа Cannot resolve symbol 'ex'. Что это за преременная и что эта строка вообще делает

Эта строка вываливает в консоль описание ошибки. Красным она подсвечивается потому-что у тебя SQLException e, а я по недосмотру написал ex.printStackTrace() вместо e.printStackTrace()
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Где ошибка (JDBC)?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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