Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > поместить Вlob в jLabel


Автор: Swatch 9.10.2007, 11:21
Добрый день. 
Есть считанное из базы изображение. как поместить его в jLabel, не подскажите?
Код

        image im = main.currentImage;//табличка в базе
        
        Blob blob = im.getImage();
        try {            
            BufferedImage image = ImageIO.read(blob.getBinaryStream());// изображение
            jLabel15.setIcon(.....);// что сюда надо написать?????
        } catch (SQLException ex) {
            jLabel15.setIcon(null);
        } catch (IOException ex) {
            jLabel15.setIcon(null);
        }        

Автор: powerOn 9.10.2007, 11:25

M
powerOn
Swatch, уже не в первый раз переношу твои темы из общих вопросов в гуи! 
Подходи пожалуйста более ответственно к выбору раздела для своего поста!


Автор: serger 9.10.2007, 11:33
раскидали вопросы..
добавть это..
Код

        ImageIcon i = new ImageIcon(image);
        l.setIcon(i);


Автор: Swatch 9.10.2007, 11:50
хмм... оч. интересно... изображение не загружается... ловится SQLException. 
Код

        Blob blob = im.getImage();
        try {            
            BufferedImage image = ImageIO.read(blob.getBinaryStream());
            ImageIcon ic = new ImageIcon(image);
            jLabel15.setIcon(ic);
        } catch (SQLException ex) {
            jLabel15.setIcon(null);
        } catch (IOException ex) {
            jLabel15.setIcon(null);
        } catch (NullPointerException ex){
            jLabel15.setIcon(null);
        }       

Изображение точно записалось в базу. записала его так:
Код

                BufferedImage image = ImageIO.read(jFileChooser1.getSelectedFile().getCanonicalFile());
                ByteArrayOutputStream output = new ByteArrayOutputStream();
                ImageIO.write(image, "jpg", output);
                SerialBlob blob;
                try {
                    blob = new SerialBlob(output.toByteArray());
                } catch (SerialException ex) {
                    blob = null;
                } catch (SQLException ex) {
                    blob = null;
                }
                property p = main.currentPropertyTemp;
                image im = main.currentImage;
                im.setProperty_id(p);
                im.setImage(blob);
                HibernateUtil.Save(im);


В чем может быть дело???

Автор: AlexeyVorotnikov 9.10.2007, 12:52
Что за классы property и image?

И где именно ловится SQLException и что в нём написано?

Автор: serger 9.10.2007, 12:58
Сперва..

1. Конкретнее можите сказать какое SQL exception? Привести его текст.

2. Вы точно уверены, что картинка в базу попадает? (Проверьте, раз привели текст значит я так думаю не смотрели в базе)

3. Ну и проверьте все запросы.

Автор: Swatch 9.10.2007, 13:11
1. вот такой эксепшн 
org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544332. invalid transaction handle (expecting explicit transaction start)
        at org.firebirdsql.jdbc.FBBlob$FBBlobInputStream.<init>(FBBlob.java:647)
        at org.firebirdsql.jdbc.FBBlob$FBBlobInputStream.<init>(FBBlob.java:620)
        at org.firebirdsql.jdbc.FBBlob.getBinaryStream(FBBlob.java:357)
        at org.hibernate.lob.SerializableBlob.getBinaryStream(SerializableBlob.java:39)

2. зря Вы думаете, что в базу я не смотрела. туда я посмотрела в первую очередь и картинка там есть.

3. SQLException ловится вот здесь
Код

BufferedImage image = ImageIO.read(blob.getBinaryStream());


4. property и image это мои классы, которые соответствуют таблицам в БД. в них прописаны методы гет и сет для полей таблиц.

Автор: AlexeyVorotnikov 9.10.2007, 13:21
Судя по сообщению "invalid transaction handle (expecting explicit transaction start)" что-то случилось с транзакцией. Скорее всего она либо закрылась раньше времени, либо вообще не открывалась.

Автор: serger 9.10.2007, 13:24
Ну, в принципе, он же Вам грит в чём проблема.. smile
У Вас не открывается транзакция перед запросом.. Точнее не скажу. Посмотрите-проверьте как настроены транзакции.

Меня опередили. smile

ps
Совет: внимательно смотрите trace ошибок и читайте название ошибки - часто это очень помогает, а в случае SQLException - ответ на ошибку бывает очень подробным и конкретным.

Автор: AlexeyVorotnikov 9.10.2007, 13:42
Скорее всего проблема вот в чём: многие базы не поддерживают отложенное чтение из блоба. Т.е. прочитать данные из блоба надо сразу же как прочитана из базы соответствующая запись. Если прочитать из базы другую запись, то блоб из предыдущей записи становится недоступен.  Я не знаю как реализована работа с блобами в FireBird. Но похожая проблема у меня была при работе с другой базой.

Автор: serger 9.10.2007, 14:14
Из 5 IB я читал не через Blob, а через getBytes(). Можно покапать в этом направлении. Правда, не имею понятия как Hibernate с массивом байт будет работать...

Автор: Swatch 9.10.2007, 15:39
хммм... пробовала уже, что-то пока безрезультатно....

Автор: AlexeyVorotnikov 9.10.2007, 16:38
Давайте Вы всё-таки покажете нам свой класс image и мапинг для него.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)