Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как добавить изображение в СУБД SQL?
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
DruidCat
Люди добрые помогите новичку. Моя программа работает с базой данных, хотелось бы записать в неё небольшую картинку с расширением png. А вот как это сделать уму не приложу. Была идея у меня прочесть png файл явно, и всё это записать в базу данных. Но я думаю что из этого ничего не выйдет. Может есть способ добавления файлов в БД? Подскажите с теоретической точки зрения. :)
PS: Картинка - это логотип конторы, в которой я работаю, идея в том, чтобы кто-нибуть в конторе, задал логотип в программе, а все остальные клиенты БД, считали бы этот логотип из БД, и у всех бы в программе красовался один и тот же логотип. :)
FireBlack
Вообще хранить изображения в базе данных это не очень хорошо, но если очень хочется...

Сначала, создаете в базе данных в нужной Вам таблице поле типа BLOB.
CREATE TABLE table1 ( ..., image BLOB, ... );

Потом загружаете картинку через QPixmap или QImage и сохраняете в QByteArray.
Раскрывающийся текст
QPixmap pixmap;
pixmap.load("logo.png");

QByteArray pixmapData;
QDataStream stream(&pixmapData, QIODevice::WriteOnly);
stream << pixmap;

Далее записываете QByteArray в базу данных.
Раскрывающийся текст
QSqlQuery query(QSqlDatabase::database("your connection name"));
query.prepere("INSERT INTO table1 VALUES (..., :image, ...);");
query.bindValue(":image", pixmapData);
query.exec();

При чтении из базы данных процедура обратная.
Раскрывающийся текст
QSqlQuery query(QSqlDatabase::database("your connection name"));
query.exec("SELECT * FROM table1");
while(query.next())
{
      ...
      QByteArray pixmapData = query.value("image").toByteArray();
      QDataStream stream(pixmapData);
      QPixmap pixmap;
      stream >> pixmap;
      ...
}

P.S.: QPixmap можно перегнать в QByteArray, и наоборот, любым удобным Вам способом, не обязательно использовать QDataStream.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.