私はC++でsqliteを使っていますが、opencvで画像を読むときに、画像(Mat)をデータベースに取り込みたいのですが、これらの中でどのようにBLOBをテーブルに挿入するのか分かりません。
sqliteにBLOBを格納して取得するにはどうすればよいですか?C++を使用してsqliteからblobを格納および取得するにはどうすればよいですか?
これらは私のコードです:文字列が最初にゼロバイトでそれを切り捨てられますよう
void DataBase::Store_Images_to_DB(std::vector<cv::Mat> input_images ,
std::vector <QString> image_names)
{
/* // this way is working, but i dont want to use this way.
QFile file("/home/hassan-setayesh/Pictures/123.png");
if (!file.open(QIODevice::ReadOnly)) return -1;
QByteArray inByteArray = file.readAll();
*/
// I want to store images to a blob from a Mat,
//this way is not working and store something wrong in QByteArray
cv::Mat image;
query = QSqlQuery(db);
if(!query.exec("CREATE TABLE IF NOT EXISTS imgTable "
"(filename TEXT, imagedata BLOB)"))
{
qDebug()<<"cant exec query for creating table";
exit(-1);
}
for(int i = 0 ; i<input_images.size() ; i++)
{
image = input_images[i];
QByteArray inByteArray((char *) image.data);
qDebug()<<"add "<<i<<"th to db";
query.prepare("INSERT INTO imgTable (filename, imagedata) "
"VALUES ('"+image_names[i]+"', :imageData)");
query.bindValue(":imageData", inByteArray);
if(!query.exec())
qDebug() << "Error inserting image into table:\n" << query.lastError();
}
}
なぜこのメソッドにパラメータをコピーしますか?それは早すぎる悲観的なものです。 Store_Images_to_DB(const std :: vector&input_images、const std :: vector &image_names) 'の代わりにconst参照で渡す必要があります。 –