powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / CallableStatement.setBinaryStream вешает Tomcat
10 сообщений из 10, страница 1 из 1
CallableStatement.setBinaryStream вешает Tomcat
    #33579961
J-Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Слава Богу, народ помог разобраться с аплоадом файла :) Ещё раз спасибо. Я думал, что запись картинки в базу не составит труда, но не тут-то было. Пытаюсь записать так:

Код: 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.
    public   boolean  AddImage(ByteArrayInputStream baInputStream,  int  taskID, String contentType)
   {

      CallableStatement cst =  null ;
       boolean  ret = false;

       try 
      {
         Connection con = connect2DB(); // моя ф-ция коннекта к БД

          if (con !=  null )
         {
            cst = con.prepareCall("{ call AddImage (?, ?, ?, ?, ?) }");

            cst.setInt( 1 , taskID);
            cst.setInt( 2 , curUserID);            
            cst.setString( 3 , contentType);
            cst.setBinaryStream( 4 , baInputStream, baInputStream.available());
            cst.setBinaryStream( 5 , baInputStream, baInputStream.available());

            cst.execute();
            cst.close();

            ret = true;

            disconnectDB(con); // моя ф-ция дисконнекта
            result = glob.NOERROR;
         }
          else  ret = false;

      }
       catch (Exception ex)
      {
         result = "Procedure execution failed: " + ex.toString() ;

         ret = false;
      }

       return  ret;
 }


После перехода к этой ф-ции, tomcat жрёт весь ресурс процессора, а страничка долго грузится. Если убрать cst.setBinaryStream, всё ок.


Картинка пихается в массив байт так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
...
         DiskFileUpload upload =  new  DiskFileUpload();

         // Parse the request
         List items = upload.parseRequest(request);

         Iterator iter = items.iterator();
          while (iter.hasNext())
         {

            FileItem item = (FileItem)iter.next();

             if (!item.isFormField())
            {
                byte [] rgb = item.get();
               
               ByteArrayInputStream baInputStream =  new  ByteArrayInputStream (rgb);

               AddImage(baInputStream,  13 , "image/jpeg");
            }
         }




Я не могу назвать себя профи в работе с потоками, поэтому и задаю такой вопрос. то-нибудь, подскажите пожалуйста, что я делаю не так?

Спасибо большое заранее.
...
Рейтинг: 0 / 0
CallableStatement.setBinaryStream вешает Tomcat
    #33580218
Евгений Путилин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
J-ProЯ не могу назвать себя профи в работе с потоками, поэтому и задаю такой вопрос. то-нибудь, подскажите пожалуйста, что я делаю не так?

Сервер БД какой?
Недавно была переписка что Oracle с блоб по стандарту JDBC не умеет работать, а крутых профи в Oracle это ине волнует
...
Рейтинг: 0 / 0
CallableStatement.setBinaryStream вешает Tomcat
    #33580323
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Путилин
Недавно была переписка что Oracle с блоб по стандарту JDBC не умеет работать, а крутых профи в Oracle это ине волнует
Где это не умеет?;) А сервер, суда по предыдущему посту, MSSQL. Какой используется драйвер?
...
Рейтинг: 0 / 0
CallableStatement.setBinaryStream вешает Tomcat
    #33580616
J-Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis Popov Евгений Путилин
Недавно была переписка что Oracle с блоб по стандарту JDBC не умеет работать, а крутых профи в Oracle это ине волнует
Где это не умеет?;) А сервер, суда по предыдущему посту, MSSQL. Какой используется драйвер?

Да, БД Microsoft SQL Server 2000 SP4 (8.00.2039). Драйвер: Microsoft SQL Server 2000 Driver for JDBC Service Pack 3.
...
Рейтинг: 0 / 0
CallableStatement.setBinaryStream вешает Tomcat
    #33580629
J-Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вообще, судя по коду, я всё правильно делаю?
В чём может быть ошибка?

Eщё, если нужно, версия Tomcat'a: 5.0.29
...
Рейтинг: 0 / 0
CallableStatement.setBinaryStream вешает Tomcat
    #33580691
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по коду, ты получаешь массив байтов, оборачиваешь его в ByteArrayInputStream, после чего передаешь в базу, хотя есть метод setBytes(). Попробуй:

Заменить CallableStatement на PreparedStatement если нет output-параметров

Дергать PreparedStatement.setBytes();

Взять другой драйвер, к примеру, jtds
...
Рейтинг: 0 / 0
CallableStatement.setBinaryStream вешает Tomcat
    #33581022
J-Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis PopovСудя по коду, ты получаешь массив байтов, оборачиваешь его в ByteArrayInputStream, после чего передаешь в базу, хотя есть метод setBytes(). Попробуй:

Заменить CallableStatement на PreparedStatement если нет output-параметров

Дергать PreparedStatement.setBytes();

Взять другой драйвер, к примеру, jtds



Заменить CallableStatement на PreparedStatement если нет output-параметров

- то же самое


Дергать PreparedStatement.setBytes();

- Не знаю почему, но это помогло :) Странно, я, вроде, пробовал setBytes(), но она чего-то ругалась и я решил потоками. вот, блин ;) Спасибо большое за совет :) Щас буду разбираться дальше :)


Взять другой драйвер, к примеру, jtds

- не пробовал


Спасибо ещё раз огромное, сегодняшняя помощь фоpума на sql.ru реально ощутима! ;)
...
Рейтинг: 0 / 0
CallableStatement.setBinaryStream вешает Tomcat
    #33581723
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А замчем сначало читать весь FileItem с помощью get(), а затем оборачивать его в ByteStream? намного эффективнее использовать FileItem.getInputStream()
...
Рейтинг: 0 / 0
CallableStatement.setBinaryStream вешает Tomcat
    #33582923
ежемуха
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет потоков, как профессионал профессионалу могу посоветовать делать в определенных местах flush(). Иногда помогает
...
Рейтинг: 0 / 0
CallableStatement.setBinaryStream вешает Tomcat
    #33584084
J-Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
funikovyuriА замчем сначало читать весь FileItem с помощью get(), а затем оборачивать его в ByteStream? намного эффективнее использовать FileItem.getInputStream()

Вот, а я и не знал, что есть такая ф-ция... Но теперь буду знать, спасибо.

Сейчас я использую просто FileItem.get(), а пихаю в базу с помощью CallableStatement.setBytes(). Всё проходит на ура.

Показывать картинку вообще труда не составляет. Как посоветовал М.Голованов :

М.Голованов<IMG src="URI_вашего_сервлета_который_выдает_картинку">

A сам сервлет просто выводит байты картинки, устанавливая ответ contentType в "image/jpeg". Отдельное спасибо за совет, я и не знал, что один сервлет в другой вставить можно таким, вот, образом...

В общем, проблема решена, всем спасибо!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / CallableStatement.setBinaryStream вешает Tomcat
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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