powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Connection reset
14 сообщений из 14, страница 1 из 1
Connection reset
    #34133810
klmntmp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
програмно формируются 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
Connection reset
    #34133898
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы не понимаете, что делаете и что происходит. Поэтому появляются такие вот посты:
Чай ЛимоновичP.P.S. Покажите мне этих писателей - убью нах.... Дебилы. Идиоты. Всех кастрировать, дабы не плодились.
...
Рейтинг: 0 / 0
Connection reset
    #34133931
klmntmp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и что я не понимаю?
...
Рейтинг: 0 / 0
Connection reset
    #34133956
klmntmp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошу прощения просто код урезал...:
Код: 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
Connection reset
    #34134366
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klmntmpи что я не понимаю?
Кто ж Вас научил такой бяке - значения в строку писать? И ЗАЧЕМ каждый раз создавать стейтмент, да еще и Callable??? PreparedStatement, создаваемый в начале цикла, и подстановку параметров уже таки запретили?
...
Рейтинг: 0 / 0
Connection reset
    #34134431
klmntmp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PreparedStatement пробывал разницы ни какой...
не понял приём тут подстановка параметров?
...
Рейтинг: 0 / 0
Connection reset
    #34134505
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Определения номера из последовательности имхо можно зашить в код. А 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
Connection reset
    #34134634
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis PopovОпределения номера из последовательности имхо можно зашить в код. А statement создавать единожды, с параметрами, которые потом подставлять и выполнять...
Именно!
З.Ы. При виде кода типа "шестнадцать тысяч раз создаем стейтмент" мне становится жалко несчастный сервер, вынужденный тупо создавать и компилить
Код: plaintext
один и тот же
запрос...
...
Рейтинг: 0 / 0
Connection reset
    #34134651
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klmntmpPreparedStatement пробывал разницы ни какой...
не понял приём тут подстановка параметров?
Мда... почитали бы что-нибудь полезное по JDBC. Типо какие виды стейтментов бывают и для чего их вообще придумали.
...
Рейтинг: 0 / 0
Connection reset
    #34134828
BlackWall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Про стейтменты все правильно. А вот для того, чтобы не терять соединение с БД, можно пользоваться услугами пулов соединений, которые к тому же умеют восстанавливать соединение при подобных ошибках. Например c3p0. А программист пусть решает бизнес задачи, а не парится с коннектами.
...
Рейтинг: 0 / 0
Connection reset
    #34135867
klmntmp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да согласен пересоздавать стейтмент надо каждые 200 записей ибо количество курсоров ограниченно и если так не делать запишет 299 записей и вылетит ибо будет слишком много открытых курсоров...
...
Рейтинг: 0 / 0
Connection reset
    #34136065
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klmntmpда согласен пересоздавать стейтмент надо каждые 200 записей ибо количество курсоров ограниченно и если так не делать запишет 299 записей и вылетит ибо будет слишком много открытых курсоров...
Повторюсь .
...
Рейтинг: 0 / 0
Connection reset
    #34136133
klmntmp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и что я не понимаю?
...
Рейтинг: 0 / 0
Connection reset
    #34136183
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klmntmp wrote:

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

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


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