Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Где ошибка (JDBC)? / 25 сообщений из 29, страница 1 из 2
23.08.2006, 16:07
    #33938101
fidel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
почему не работает? подскажите пожалуйста

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

PreparedStatement - это как?

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


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

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

тогда подобных вопросов станет намного меньше.
...
Рейтинг: 0 / 0
24.08.2006, 00:22
    #33938981
Кувалдин Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
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
24.08.2006, 08:25
    #33939092
fidel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
Роман и Partisan M, огромное вам спасибо за советы, обязательно учту. А насчет использования PreparedStatement, я так понял что это делается для более удобного чтения кода или может я что-то неправильно понял? В любом случае спасибо!
...
Рейтинг: 0 / 0
24.08.2006, 09:54
    #33939243
l
l
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
Роман опечатался, не везде единичка -
Код: plaintext
s.setString( 2 , lastname);
потом 3 и т.д., короче номер подставляемого значения ставь..
...
Рейтинг: 0 / 0
24.08.2006, 09:57
    #33939252
carper
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
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
24.08.2006, 10:50
    #33939409
парабелум
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
Код: plaintext
1.
s.setString( 2 , lastname);

Здесь цифра 2 это номер подставляемого значения в заросе или номер поля в таблице
...
Рейтинг: 0 / 0
24.08.2006, 11:01
    #33939449
l
l
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
номер вопросика (?) в твоём preparedStatement, т.е. подставляемого значения..
...
Рейтинг: 0 / 0
24.08.2006, 12:32
    #33939830
fidel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
млин не работает все равно, может ошибка не в методе UpdateUserAccount? А кто нить проверял этот метод?
...
Рейтинг: 0 / 0
24.08.2006, 13:18
    #33940023
fidel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
Понимаю, что уже наверно всех замучал, но воте еще вопрос возник, может я неправильно в 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
24.08.2006, 13:21
    #33940045
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
а в чем собственно вопрос?
...
Рейтинг: 0 / 0
24.08.2006, 14:25
    #33940337
fidel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
Вопрос собствено в том что не работает выше описаный метод в бине, кто нить его проверить может? может проблема на уровне самой БД?
...
Рейтинг: 0 / 0
24.08.2006, 14:31
    #33940357
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
НЕЛЬЗЯ так использовать бины. В бинах должны быть только set/get методы, для свойств объекта! Все операции с БД долны быть вынесены в отдельный класс.
...
Рейтинг: 0 / 0
24.08.2006, 14:46
    #33940416
fidel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
ТимоН, во многих книгах, (хотя книги конечно не показатель) запросы к БД засовывают в бины. Хорошо допустим я последую Вашему совету, и выкину из бина всю логику, тогда куда мне девать sql запросыб т.е. мою логику? Ну не в сервлеты ни в jsp ее не сунешь, естественно. Куда тогда?
...
Рейтинг: 0 / 0
24.08.2006, 14:59
    #33940472
maddcast
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
Какой Exception?
...
Рейтинг: 0 / 0
24.08.2006, 15:13
    #33940539
fidel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
2Тимон - Сори, немного тупанул в прошлом посте, т.е. я так понял что бины только для хранения параметров, а логику надо просто сувать в отдельные классы - это будет считаться хорошим тоном? Наверно в книгах, что то не так, вот книженция - где приводиться пример MVC и бин состоит практически из одних запросов к БД.

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



Exceptiona нет никакого, тока вот на jsp странице выводиться "error! user is not update". см.выше
...
Рейтинг: 0 / 0
24.08.2006, 15:18
    #33940561
maddcast
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
Может у тебя внутри метода исключение. Попробуй debug, и все вопросы отпадут.
...
Рейтинг: 0 / 0
24.08.2006, 15:20
    #33940572
l
l
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
а в консоли сервера приложений посмотри exception, должен быть
...
Рейтинг: 0 / 0
24.08.2006, 15:29
    #33940608
carper
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
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
24.08.2006, 15:39
    #33940641
carper
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
Да, для ясности, я говорил про обычные бины, EJB - это немного другая кухня, заточенная под базы данных.
Вот тут уж, действительно и параметры и сами запросы и т.д. и т.п.
...
Рейтинг: 0 / 0
24.08.2006, 16:12
    #33940785
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Где ошибка (JDBC)?
Кстати, первоначальный код у него правильный.
Как-то для проверки хотел "напрямую" изменить в таблице базы значение через UPDATE (пользуюсь я OJB, но из-за вопросов кодировок не знал, в какой момент она меняется - грешил на OJB). Не использовал никаких бинов, просто знал, что я меняю, где я меняю и на что я меняю и фактически запрос был одной стринговой строкой (чтобы вы не думали, что ошибка вкралась в формирование строки запроса). Коннект произошел нормально, запрос - нет.

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

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

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


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