Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / почему не хочет работать PreparedStatement / 11 сообщений из 11, страница 1 из 1
23.03.2007, 10:38:00
    #34410686
newj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не хочет работать 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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
 package  beans.DB.base;

 import  beans.DB.DBConnectionDispatcher;

 import  java.sql.*;

/**
 * Created by IntelliJ IDEA.
 * User: oed0nv
 * Date: 21.03.2007
 * Time: 14:44:07
 * To change this template use File | Settings | File Templates.
 */
 public   class  UnifyNumberClamping {
    String qualifier;
    PreparedStatement pstmt =  null ;
    Connection conn =  null ;
    Statement stmt =  null ;
     private  ResultSet rs =  null ;
    //********************************************************
    // Декларация переменных
    String sql;
    int unNomOgr;
    private java.sql.Timestamp currentTimestamp;
//    private String currentTimestamp;
    //********************************************************


    public UnifyNumberClamping(){
        try{
            //получаем соеденение из пула
            qualifier = new DBConnectionDispatcher().getQualifier();
            conn = new DBConnectionDispatcher().getConnection();
            //создаем объект tatement,который можно использовать для выполнения SQL-запроса
            stmt = conn.createStatement();

            sql="select current timestamp from sysibm.sysdummy1";
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            while (rs.next()){
//                currentTimestamp=Timestamp.valueOf(TimestampChange(rs.getString(1)));
                currentTimestamp=rs.getTimestamp(1);
            }

/*
            sql="insert into "+qualifier+"KU_UNN_OGR (UNN_TS) values('"+timestampChange(currentTimestamp)+"')";
            stmt.executeUpdate(sql);
*/
            sql="insert into "+qualifier+"KU_UNN_OGR (UNN_TS) values(?)";
            pstmt = conn.prepareStatement(sql);
//            pstmt.setString(1,String.valueOf(currentTimestamp));
            pstmt.setTimestamp( 1 ,currentTimestamp);
            pstmt.executeUpdate(sql);


/*
            sql="select unn_ogr from "+qualifier+"KU_UNN_OGR where UNN_TS='"+timestampChange(currentTimestamp)+"'";
            rs = stmt.executeQuery(sql);

            while (rs.next()){
                unNomOgr=rs.getInt(1);
            }
*/
            sql="select unn_ogr from "+qualifier+"KU_UNN_OGR where UNN_TS=?";
            pstmt = conn.prepareStatement(sql);
//            pstmt.setString(1,String.valueOf(currentTimestamp));
            pstmt.setTimestamp( 1 ,currentTimestamp);
            rs = pstmt.executeQuery();

             while  (rs.next()){
                unNomOgr=rs.getInt( 1 );
            }

/*
            sql="delete from "+qualifier+"KU_UNN_OGR where UNN_TS='"+timestampChange(currentTimestamp)+"'";
            stmt.executeUpdate(sql);
*/
            sql="delete from "+qualifier+"KU_UNN_OGR where UNN_TS=?";
            pstmt = conn.prepareStatement(sql);
//            pstmt.setString(1,String.valueOf(currentTimestamp));
            pstmt.setTimestamp( 1 ,currentTimestamp);
            pstmt.executeUpdate(sql);

//            System.out.println("UNN"+unNomOgr);

        } catch (SQLException sqle){
            System.out.println("***Bean UnifyNumberClamping***SQLException: "+sqle.getMessage());
            sqle.printStackTrace();
             throw   new  SecurityException(sqle.getMessage());
        }  catch  (Exception e){
            System.out.println("***Bean UnifyNumberClamping***Exception: "+e.getMessage());
             throw   new  SecurityException(e.getMessage());
        }  finally {
             try {
                //при закрытии объекта Statement (оператор), закрываются все связанные с ним ResultSet
                 if (stmt!= null ){
                    stmt.close();
                }
                 if (pstmt!= null ){
                    pstmt.close();
                }
                //ОЧЕНЬ ВАЖНО!!!!!Этот код возвращает соеденение в пул
                 if (conn!= null ){
                    conn.close();
                }
            } catch (SQLException sqle){
                System.out.println("***Bean UnifyNumberClamping***SQLException: "+sqle.getMessage());
            }
        }


    }



      //приводит к виду Timestamp в DB2
     public   static  String timestampChange(Timestamp Timestamp) {
        String r = String.valueOf(Timestamp);
        String d = "-";
        String p = ".";
        // '2004-11-15 18:29:32.083961' caiaiyai ia '2004-11-15-18.29.32.083961'
        r = r.substring( 0 , 4 ) + d + r.substring( 5 , 7 )+d+r.substring( 8 , 10 )+d+r.substring( 11 , 13 )+p+
                r.substring( 14 , 16 )+p+r.substring( 17 , 19 )+p+r.substring( 20 );

         return  r;
    }

     public   int  getNum(){
         return  unNomOgr;
    }

}

вылетает на запросах в которых есть установка параметра currentTimestamp
говорит

[IBM][CLI Driver] CLI0100E Неверное число параметров. SQLSTATE=07001
at beans.DB.base.UnifyNumberClamping.(UnifyNumberClamping.java:89)



с обычными стейтманами все нормально пашет
...
Рейтинг: 0 / 0
23.03.2007, 11:20:41
    #34410883
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не хочет работать PreparedStatement
конструкции типа
Код: plaintext
"insert into "+qualifier+"KU_UNN_OGR (UNN_TS) values('"+timestampChange(currentTimestamp)+"')"
в топку, используйте нормальное решение
Код: plaintext
pstmt.setTimestamp( 1 ,currentTimestamp);
зы
Код: plaintext
1.
2.
r = r.substring( 0 , 4 ) + d + r.substring( 5 , 7 )+d+r.substring( 8 , 10 )+d+r.substring( 11 , 13 )+p+
                r.substring( 14 , 16 )+p+r.substring( 17 , 19 )+p+r.substring( 20 );
тоже переписать с исп. StringBuilder|StringBuffer
ззы
Удачи.
...
Рейтинг: 0 / 0
23.03.2007, 12:14:47
    #34411215
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не хочет работать PreparedStatement
автортоже переписать с исп. StringBuilder|StringBuffer
а еще лучше SimpleDateFormat
...
Рейтинг: 0 / 0
23.03.2007, 12:22:48
    #34411261
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не хочет работать PreparedStatement
ТимоН автортоже переписать с исп. StringBuilder|StringBuffer
а еще лучше SimpleDateFormat
да и вообще функцию timestampChange выкинуть
...
Рейтинг: 0 / 0
23.03.2007, 12:55:41
    #34411389
newj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не хочет работать 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.
33.
34.
35.
36.
37.
38.
           //получаем соеденение из пула
            qualifier =  new  DBConnectionDispatcher().getQualifier();
            conn =  new  DBConnectionDispatcher().getConnection();
            //создаем объект tatement,который можно использовать для выполнения SQL-запроса
            stmt = conn.createStatement();

            sql="select current timestamp from sysibm.sysdummy1";
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
             while  (rs.next()){

                currentTimestamp=rs.getTimestamp( 1 );
            }

            sql="insert into "+qualifier+"KU_UNN_OGR (UNN_TS) values(?)";
            pstmt = conn.prepareStatement(sql);

            pstmt.setTimestamp( 1 ,currentTimestamp);
            pstmt.executeUpdate(sql);


            sql="select unn_ogr from "+qualifier+"KU_UNN_OGR where UNN_TS=?";
            pstmt = conn.prepareStatement(sql);

            pstmt.setTimestamp( 1 ,currentTimestamp);
            rs = pstmt.executeQuery();

             while  (rs.next()){
                unNomOgr=rs.getInt( 1 );
            }

            sql="delete from "+qualifier+"KU_UNN_OGR where UNN_TS=?";
            pstmt = conn.prepareStatement(sql);

            pstmt.setTimestamp( 1 ,currentTimestamp);
            pstmt.executeUpdate(sql);


велет после
Код: plaintext
1.
2.
3.
4.
5.
            sql="insert into "+qualifier+"KU_UNN_OGR (UNN_TS) values(?)";
            pstmt = conn.prepareStatement(sql);

            pstmt.setTimestamp( 1 ,currentTimestamp);
            pstmt.executeUpdate(sql);

"неверное число параметров"
почему?
...
Рейтинг: 0 / 0
23.03.2007, 13:00:33
    #34411426
newj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не хочет работать PreparedStatement
Код: plaintext
"insert into "+qualifier+"KU_UNN_OGR (UNN_TS) values('"+timestampChange(currentTimestamp)+"')"

писалось для простого стейтмена(потому и в коментах)

автор

тоже переписать с исп. StringBuilder|StringBuffer

а еще лучше SimpleDateFormat

чем лучше то?
...
Рейтинг: 0 / 0
23.03.2007, 13:02:25
    #34411434
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не хочет работать PreparedStatement
Почитайте документацию и поймете в чем разница. И про Prepared тоже.
...
Рейтинг: 0 / 0
23.03.2007, 13:08:08
    #34411460
newj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не хочет работать PreparedStatement
ага.... мне понятно что в jdk 1.3 есть тока стрингбуфер!
...
Рейтинг: 0 / 0
23.03.2007, 13:24:20
    #34411509
newj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не хочет работать PreparedStatement
и что я в доках про Prepared должен был вычитать?
...
Рейтинг: 0 / 0
23.03.2007, 13:44:11
    #34411579
newj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не хочет работать PreparedStatement
фу ты блин
Код: plaintext
1.
pstmt.executeUpdate(sql); 

зачем то сдуру sql в скобках написал и продублировал код неправильно
...
Рейтинг: 0 / 0
25.03.2007, 08:47:45
    #34413840
cooluser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему не хочет работать PreparedStatement
А имена таблиц и полей у вас кстати веселенкие, как вы в них не путаетесь только?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / почему не хочет работать PreparedStatement / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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