Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись в БД. Запись/чтение изображений с БД MySql 
:(
    Опции темы
apk999
Дата 4.9.2007, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 4.9.2007

Репутация: нет
Всего: нет



Помогите пожалуйста уважаемые эксперты начинающему программисту. 
Аналогично решаемая мной задача была рассмотрена ранее (http://forum.vingrad.ru/forum/topic-75537/0.html). Но выполнив данный код (точно так как указанно там) у меня ничего не вышло. В БД ничего не записывается. А если я в ручную записываю данные в БД (поле типа BLOB) а потом пытаюсь сохранить в файл (указанным в коде способом) ни чего не выходит.
Сам код программы:


Код

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;

public class Main
{

    public Main()
    {
    }

    public static void main(String[] args)
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            Connection connection =
                    DriverManager.getConnection("jdbc:mysql://localhost/testdb", "root", "12345");
            
            // Запись картинки в базу данных.
            BufferedImage pict = ImageIO.read(new File("C:/testimage.gif"));
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ImageIO.write(pict, "gif", out);
            
            String query1 = "INSERT INTO test(image) VALUES(?)";
            PreparedStatement st = connection.prepareStatement(query1);
            st.setBytes(1, out.toByteArray());
            
            System.out.println("Rows updated: " + st.executeUpdate());

            // Получение картинки из базы данных.
            String query2 = "SELECT * FROM test";
            Statement st2 = connection.createStatement();
            
            ResultSet rs = st2.executeQuery(query2);
            
            int i = 1;
            while (rs.next())
            {
                BufferedImage image = ImageIO.read(rs.getBlob("image").getBinaryStream());
                ImageIO.write(image, "gif", new File(i+".gif"));
                i++;
            }

            connection.close();
        }
        catch (Exception ex)
        {
            Logger.getLogger("global").log(Level.SEVERE, null, ex);
        }
    }
    

}

PM MAIL   Вверх
powerOn
Дата 5.9.2007, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Исключения вылетают?


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
apk999
Дата 5.9.2007, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 4.9.2007

Репутация: нет
Всего: нет



Да, вылетают, следующие:

SEVERE: null
java.lang.IllegalArgumentException: im == null!
    at javax.imageio.ImageIO.write(Unknown Source)
    at javax.imageio.ImageIO.write(Unknown Source)
    at main.Main.main(Main.java:51)

PM MAIL   Вверх
Hidrag
Дата 5.9.2007, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 877
Регистрация: 9.4.2005
Где: JDK

Репутация: 3
Всего: 25



сейчас порылся в своих исходниках у меня в этом месте:
Код

ImageIO.write(image, "gif", new File(i+".gif"));

не файл а  OutputStreem.




--------------------
user posted image
PM WWW ICQ   Вверх
v2v
Дата 5.9.2007, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



а картинка точно есть по указанному адресу?


Это сообщение отредактировал(а) v2v - 5.9.2007, 12:05


--------------------
PM   Вверх
apk999
Дата 5.9.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 4.9.2007

Репутация: нет
Всего: нет



Картинка есть.
PM MAIL   Вверх
v2v
Дата 5.9.2007, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



ну тогда попробуй убраь логгер и поставь ex.PrintStackTrace(); , а то не совсем понятно что за эксепшин.


--------------------
PM   Вверх
apk999
Дата 5.9.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 4.9.2007

Репутация: нет
Всего: нет



Данные исключения возникают при выполнении кода полностью. Но когда я выполняю часть кода, запись данных в БД:
Код

Class.forName("com.mysql.jdbc.Driver").newInstance();
            Connection connection =
                    DriverManager.getConnection("jdbc:mysql://localhost/testdb", "root", "12345");
            
            // Запись картинки в базу данных.
            BufferedImage pict = ImageIO.read(new File("C:/testimage.gif"));
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ImageIO.write(pict, "gif", out);
            
            String query1 = "INSERT INTO test(image) VALUES(?)";
            PreparedStatement st = connection.prepareStatement(query1);
            st.setBytes(1, out.toByteArray());
            
            System.out.println("Rows updated: " + st.executeUpdate());

А потом проверяю записанные данные, то оказывается что записано 0 байт. При этом не каких исключений не возникает.
Так же, исключения не возникают если я пытаюсь считать данные из БД и создать файл, выполнив следующий код:
Код

String query2 = "SELECT * FROM test";
            Statement st2 = connection.createStatement();

            ResultSet rs = st2.executeQuery(query2);

            int i = 1;
            while (rs.next())
            {
                BufferedImage image = ImageIO.read(rs.getBlob("image").getBinaryStream());
                ImageIO.write(image, "gif", new File(i+".gif"));
                i++;
            }

Файл создается, но пустой. При этом, заранее, в базу я записываю содержимое картинки в ручную.

Добавлено через 3 минуты и 54 секунды
Поменял:
Код

Logger.getLogger("global").log(Level.SEVERE, null, ex);

на:
Код

ex.printStackTrace();

Проверил, исключения те же:

java.lang.IllegalArgumentException: im == null!
    at javax.imageio.ImageIO.write(Unknown Source)
    at javax.imageio.ImageIO.write(Unknown Source)
    at main.Main2.main(Main2.java:51)

PM MAIL   Вверх
apk999
Дата 5.9.2007, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 4.9.2007

Репутация: нет
Всего: нет



Извиняюсь, всетаки исключения возникают при чтении файла из БД и его создании.
PM MAIL   Вверх
v2v
Дата 5.9.2007, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



out.toByteArray().length что возвращает?
бо у меня 0.

Добавлено через 4 минуты и 53 секунды
а попробуй ка gif заменить на JPG


--------------------
PM   Вверх
apk999
Дата 5.9.2007, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 4.9.2007

Репутация: нет
Всего: нет



Цитата

out.toByteArray().length что возвращает?

Возвращает - 0.
PM MAIL   Вверх
v2v
Дата 5.9.2007, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



это не правильно, попробуй:
Цитата(v2v @  5.9.2007,  12:57 Найти цитируемый пост)

Добавлено через 4 минуты и 53 секунды
а попробуй ка gif заменить на JPG 




--------------------
PM   Вверх
apk999
Дата 5.9.2007, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 4.9.2007

Репутация: нет
Всего: нет



Супер, работает, только не совсем корректно. Я везде заменил gif на jpg. Сохранил в БД, извлек, картинка создалась только много красного цвета (т.е. поменяла свой цвет).
PM MAIL   Вверх
v2v
Дата 5.9.2007, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



в коде программы:            
ImageIO.write(pict, "JPG", out); 
у меня так заработало.


--------------------
PM   Вверх
apk999
Дата 5.9.2007, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 4.9.2007

Репутация: нет
Всего: нет



У меня тоже работает, но создаваемая картинка становится слишком красной. Ладно, буду использовать формат jpg а не gif, мен даже лучше. БОЛЬШОЕ спасибо за помощь, а то я второй день мучался, толком сделать не мог.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0547 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.