先看Qt官方的例子:源码来自How to Store and Retrieve Image on SQLite
https://wiki.qt.io/How_to_Store_and_Retrieve_Image_on_SQLite
#include "mainwindow.h" //源码来自 //How to Store and Retrieve Image on SQLite //https://wiki.qt.io/How_to_Store_and_Retrieve_Image_on_SQLite #include <QApplication> #include <QtSql> #include <QtWidgets> int main(int argc, char *argv[]) { QApplication a(argc, argv); // Set up database QString dbName("myDatabase.db3"); //默认路径在文件夹build-sqldemo-Desktop_Qt_5_12_9_MSVC2017_64bit-Debug QFile::remove(dbName); // delete sqlite file if it exists from a previous run QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName(dbName); db.open(); QSqlQuery query = QSqlQuery(db); query.exec("CREATE TABLE IF NOT EXISTS imgTable ( filename TEXT, imagedata BLOB )"); // Generate an image (in this case a screenshot) and store it in a QByteArray QScreen *screen = a.primaryScreen(); QPixmap inPixmap = screen->grabWindow(0); QByteArray inByteArray; QBuffer inBuffer(&inByteArray); inBuffer.open(QIODevice::WriteOnly); inPixmap.save(&inBuffer, "PNG"); // write inPixmap into inByteArray in PNG format // Alternatively, load an image file directly into a QByteArray // QFile file("screenshot.png"); // if (!file.open(QIODevice::ReadOnly)) return; // QByteArray inByteArray = file.readAll(); // Insert image bytes into the database // Note: make sure to wrap the :placeholder in parenthesis query.prepare("INSERT INTO imgTable (filename, imagedata) VALUES ('screenshot.png', :imageData)"); query.bindValue(":imageData", inByteArray); if (!query.exec()) qDebug() << "Error inserting image into table:\n" << query.lastError(); // Get image data back from database if (!query.exec("SELECT imagedata from imgTable")) qDebug() << "Error getting image from table:\n" << query.lastError(); query.first(); QByteArray outByteArray = query.value(0).toByteArray(); QPixmap outPixmap = QPixmap(); outPixmap.loadFromData(outByteArray); db.close(); // Display image QLabel myLabel; myLabel.setPixmap(outPixmap); myLabel.show(); //MainWindow w; //w.show(); return a.exec(); }
打开文件,读取二进制数据
QFile file(fileName); if (!file.open(QIODevice::ReadOnly)) return; QByteArray byteArray = file.readAll(); QSqlQuery query; query.prepare("INSERT INTO imgtable (imgdata) VALUES (?)"); query.addBindValue(byteArray); query.exec();
打开多个数据库
QString connName = "basedb" QSqlDatabase db ; if(QSqlDatabase::contains(connName)){ //如已经打开这个数据库,直接调出这个数据连接 db = QSqlDatabase::database(connName); }else //否则打开这个数据库,注意带上数据库名 db = QSqlDatabase::addDatabase("QSQLITE",connName); //操作数据库1 QSqlQuery query; //默认数据库1 query.exec("select * from student"); //操作数据库2 QSqlDatabase db2 = QSqlDatabase::addDatabase("QSQLITE","a"); //连接数据库2 QSqlQuery query(db2); //绑定db2 query.exec("select * from teacher");
---
推荐阅读:
https://www.sqlite.org/index.html
http://qtdebug.com/qtbook-db-util/
http://qtdebug.com/qtbook-db-common/
http://www.qtcn.org/bbs/read-htm-tid-88649.html
https://gitee.com/feiyangqingyun/QWidgetDemo/tree/master/dbpage
https://blog.csdn.net/wsj18808050/article/details/44891715