Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Connection reset / 14 сообщений из 14, страница 1 из 1
16.11.2006, 15:44:57
    #34133810
klmntmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection reset
програмно формируются insert`ы в таблицу базы...
через некоторое время:
06/11/16 14:24:13 Connection reset
попробывал переодически делать select date from dual не помогает
всё равно где то на 16000 записях отваливается((

какие методы решения?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
         Class .forName("oracle.jdbc.driver.OracleDriver");
        Connection connect = DriverManager.getConnection("jdbc:oracle:thin:@host:1521:orex", "****", "****");
          while (next)
         {       
           Statement st = connect.createStatement();
           ResultSet seqval = st.executeQuery("select TEST_SEQ.nextval from dual");
           resbuff.append("INSERT INTO TEST (ID, NID) VALUES ( " + seqval.getString( 1 ) + " ," + nid);
           CallableStatement cstmt = connect.prepareCall(ex);        
           cstmt.execute();
           cstmt.close();
           seqval.close();
           count++;
            if (count== 1000 )
           {
             connect.commit();
             st.executeQuery("select sysdate from dual");
           }
           resbuff.delete( 0 , resbuff.length());
           st.close();
        }
         connect.commit();
...
Рейтинг: 0 / 0
16.11.2006, 16:07:24
    #34133898
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection reset
Вы не понимаете, что делаете и что происходит. Поэтому появляются такие вот посты:
Чай ЛимоновичP.P.S. Покажите мне этих писателей - убью нах.... Дебилы. Идиоты. Всех кастрировать, дабы не плодились.
...
Рейтинг: 0 / 0
16.11.2006, 16:14:27
    #34133931
klmntmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection reset
и что я не понимаю?
...
Рейтинг: 0 / 0
16.11.2006, 16:19:13
    #34133956
klmntmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection reset
прошу прощения просто код урезал...:
Код: 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.
         while (zis.available()> 0 )
        {
         zis.getNextEntry();
         DBFReader dbfr =  new  DBFReader(zis);
         StringBuffer resbuff =  new  StringBuffer();
         Object [] rows =  null ;
          int  countf = dbfr.getFieldCount();
          int  count= 0 ;
          while (dbfr.hasNextRecord())
         {       
           Statement st = connect.createStatement();
           rows = dbfr.nextRecord();
           ResultSet refid = st.executeQuery("select secid from test where CODE='" + typefdb(rows[0],dbfr.getField(0).getType(),inXML)+"'");
           refid.next();
           String sid = refid.getString( 1 );
           ResultSet seqval = st.executeQuery("select TEST_SEQ.nextval from dual");
           seqval.next();
           resbuff.append("INSERT INTO TEST (ID, SID, DATETIME, P, Q, V) VALUES ( " + seqval.getString( 1 ) + " ," + sid);
            for ( int  i= 1 ;i<countf;i++)
           {
              if (i== 3 )
             {
                continue ;
             }
              if (dbfr.getField(i).getType()=='D')
             {
               resbuff.append(", TO_DATE( '").append(typefdb(rows[i],dbfr.getField(i).getType(),inXML)).append(" ").append(typefdb(rows[i+1],dbfr.getField(i+1).getType(),inXML)).append("','YYYY-MM-DD HH24:MI:SS')");
               i++;
                continue ;
             }
             resbuff.append(", ").append(typefdb(rows[i],dbfr.getField(i).getType(),inXML));
           }
           resbuff.append(")");
           String ex = resbuff.toString();
           CallableStatement cstmt = connect.prepareCall(ex);        
           cstmt.execute();
           cstmt.close();
           seqval.close();
           count++;
            if (count== 1000 )
           {
             connect.commit();
             st.executeQuery("select sysdate from dual");
           }
           resbuff.delete( 0 , resbuff.length());
           st.close();
         }
         connect.commit();
...
Рейтинг: 0 / 0
16.11.2006, 17:36:44
    #34134366
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection reset
klmntmpи что я не понимаю?
Кто ж Вас научил такой бяке - значения в строку писать? И ЗАЧЕМ каждый раз создавать стейтмент, да еще и Callable??? PreparedStatement, создаваемый в начале цикла, и подстановку параметров уже таки запретили?
...
Рейтинг: 0 / 0
16.11.2006, 17:54:28
    #34134431
klmntmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection reset
PreparedStatement пробывал разницы ни какой...
не понял приём тут подстановка параметров?
...
Рейтинг: 0 / 0
16.11.2006, 18:08:45
    #34134505
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection reset
Определения номера из последовательности имхо можно зашить в код. А statement создавать единожды, с параметрами, которые потом подставлять и выполнять. Исходя из первого:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
DriverManager.registerDriver( new  oracle.jdbc.driver.OracleDriver);
Connection con =  null ;
Preparedstatement pst =  null ;
 try  {
  con = DriverManager.getConnection("jdbc:oracle:thin:@host:1521:orex", "****", "****");
  con.setAutoCommit(false); // по умолчанию - true
  pst = con.prepareStatement("insert into TEST (id, nid) values (test_seq.nextval, ?");
   while (...)  {       
    pst.setString( 1 , nid);
    pst.execute();
  }
}  finally  {
   if  (pst !=  null ) {pst.close(();}
   if  (con !=  null ) {con.close(();}
}
}
...
Рейтинг: 0 / 0
16.11.2006, 18:57:23
    #34134634
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection reset
Denis PopovОпределения номера из последовательности имхо можно зашить в код. А statement создавать единожды, с параметрами, которые потом подставлять и выполнять...
Именно!
З.Ы. При виде кода типа "шестнадцать тысяч раз создаем стейтмент" мне становится жалко несчастный сервер, вынужденный тупо создавать и компилить
Код: plaintext
один и тот же
запрос...
...
Рейтинг: 0 / 0
16.11.2006, 19:02:44
    #34134651
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection reset
klmntmpPreparedStatement пробывал разницы ни какой...
не понял приём тут подстановка параметров?
Мда... почитали бы что-нибудь полезное по JDBC. Типо какие виды стейтментов бывают и для чего их вообще придумали.
...
Рейтинг: 0 / 0
16.11.2006, 20:30:42
    #34134828
BlackWall
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection reset
Про стейтменты все правильно. А вот для того, чтобы не терять соединение с БД, можно пользоваться услугами пулов соединений, которые к тому же умеют восстанавливать соединение при подобных ошибках. Например c3p0. А программист пусть решает бизнес задачи, а не парится с коннектами.
...
Рейтинг: 0 / 0
17.11.2006, 11:41:14
    #34135867
klmntmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection reset
да согласен пересоздавать стейтмент надо каждые 200 записей ибо количество курсоров ограниченно и если так не делать запишет 299 записей и вылетит ибо будет слишком много открытых курсоров...
...
Рейтинг: 0 / 0
17.11.2006, 12:16:28
    #34136065
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection reset
klmntmpда согласен пересоздавать стейтмент надо каждые 200 записей ибо количество курсоров ограниченно и если так не делать запишет 299 записей и вылетит ибо будет слишком много открытых курсоров...
Повторюсь .
...
Рейтинг: 0 / 0
17.11.2006, 12:31:29
    #34136133
klmntmp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection reset
и что я не понимаю?
...
Рейтинг: 0 / 0
17.11.2006, 12:42:02
    #34136183
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Connection reset
klmntmp wrote:

> да согласен пересоздавать стейтмент надо каждые 200 записей ибо
> количество курсоров ограниченно и если так не делать запишет 299 записей
> и вылетит ибо будет слишком много открытых курсоров...

Зачем тебе 200 одновременно открытых курсоров, когда для записи в базу ты можешь
обойтись одним? Кроме того, кроме твоего приложения с базой может работать
кто-то еще, которому тоже надо выполнять запросы, и которые могут упереться в
невозможность открытия курсора. потому что ты все взял под себя.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Connection reset / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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