Bilder in mySQL Datenbank einbinden?

Alles rund um die Programmierung mit Qt
Antworten
sea_bear
Beiträge: 61
Registriert: 9. Oktober 2005 16:40
Wohnort: Schortens

Bilder in mySQL Datenbank einbinden?

Beitrag von sea_bear »

Moin moin!
Ich würde gerne in einem Programm von mir, geschrieben in QT 3.x welches mySQL als Datenbank nutzt, Bilder in der Datenbank abspeichern. Und zwar möchte ich jetzt nicht den Pfad abspeichern, sondern wirklich die Bilder. Ich weiß, ich könnte ein Verzeichnis anlegen und alle Bilder automatisch dorthin kopieren und dann als Verweis in der Datenbank ablegen. Ich hätte sie aber gerne fest in der Datenbank integriert, was einem Backup oder verschieben der Datenbank entgegen kommen würde.
Irgendwer eine Idee wie ich das in Qt 3.x realisiere?

mfg
Tobias
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Du kannst es als QByteArray in die DB stecken.
sea_bear
Beiträge: 61
Registriert: 9. Oktober 2005 16:40
Wohnort: Schortens

Beitrag von sea_bear »

BartSimpson hat geschrieben:Du kannst es als QByteArray in die DB stecken.
Ja aber wie mache ich es als Code ausgedrückt? das ist ja gerade mein Problem!

Tobias
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Code: Alles auswählen

QSqlQuery Abfrage;
QImage Bild;
QByteArray Datenfeld;
QBuffer Puffer(&Datenfeld);
Puffer.open(QIODevice::WriteOnly);
Bild.save(&Puffer, "PNG");
Abfrage.prepare("INSERT INTO Bilder (Bild) VALUES (?)");
Abfrage.bindValue(0,Bild);
Abfrage.exec();
Wobei das Feld Bild in der Tabelle denn besser ein BLOB sein sollte:)
C167
Beiträge: 105
Registriert: 9. Februar 2008 20:30

Beitrag von C167 »

ich hab hier mal das ganze fertig fuer eine SQLite-Datenbank geschrieben:

Code: Alles auswählen

QFile file;
QSqlQuery query2;
for ( int i = 0; i < filenames.size(); i++ )
{
	query2.clear();
	query2.prepare ( "UPDATE pictures SET data = :data WHERE filename = :filename;" );
	file.setFileName ( QDir::currentPath()+filenames[i] );
	if ( !file.open ( QIODevice::ReadOnly ) || !file.exists() )
	{
		cerr << "Error: #" << file.error() << ", Message: \"" << file.errorString().toStdString() << "\" in File " << file.fileName().toStdString() << endl;
		continue;
	}
	query2.bindValue ( ":data", file.readAll() );
	query2.bindValue ( ":filename", filenames[i] );
	query2.exec();
	if (query2.lastError().isValid())
	{
		cerr << "Error in UPDATE-Statement: " << query2.lastError().text().toStdString();
	}
}
filenames ist einfach eine QStringList, das data-feld ist BLOB. Das Ding kann natuerlich nicht nur fuer Bilder verwendet werden, sondern im grunde fuer jede Art von Daten. Zum Anzeigen einfach

Code: Alles auswählen

QSqlQuery query ( QString ( "SELECT data FROM pictures WHERE id = %1" ).arg ( img_list[pic] ), imgDb );
QSqlRecord record = query.record();
if ( query.next() )
{
	label->setPixmap (  QPixmap::fromImage ( QImage::fromData ( query.value ( 0 ).toByteArray() ) ) );
}
¤dit: vllt sollte ich erst aufs datum schauen ;) ueber die suche gefunden
Antworten