解析QT 使用Sqlite存儲讀取文件
QT 使用Sqlite存儲讀取文件是本文所介紹的內容,Qt中使用第三方的數據庫(Sqlite)存儲并讀取文件本體,在網上找了一下關于如何在數據庫中存儲文件本體(一般是關于image)的內容,但是發現大多數的做法都是存儲文件相應的路徑,需要該文件的時候通過路徑查詢,感覺那樣的做法的話,文件只是在一種抽象的方式被存儲在了數據庫中,本體并沒有被存儲,這樣做可能是出于效率和數據庫大小的考慮(本人對數據庫知道的不多)。因為前段時間對QT比較感興趣,然后發現其中可以使用第三方的數據庫,于是嘗試了下。
(1)創建數據庫連接
- bool MyDatabase::CreateConnection()
- {
- db = QSqlDatabase::addDatabase("QSQLITE");
- db.setDatabaseName("mydb.db");
- if (!db.open()) {
- qDebug()<<" can't open database >>>>>> mydb.db";
- exit(-1);
- }
- return true;
- }
使用第三方數據庫Sqlite,數據庫名字為mydb.db,而后就是打開數據庫了。
- bool MyDatabase::CreateTable()
- {
- QStringList tableList = db.tables();
- QSqlQuery query(db);
- if(!tableList.contains("files"))
- {
- QString createTable = "create table files (id integer primary key,"
- "filename varchar(128) unique, filecontent blob)";
- if(!query.exec(createTable))
- {
- qDebug()<<query.lastError();
- exit(-1);
- }
- }
- return true;
- }
(2)創建存儲說需要的表
查看是否存在相關的表,不存在,則通過"create table files (id integer primary key,filename varchar(128) unique, filecontent blob)";創建files表。
(3)存儲文件名為
- bool MyDatabase::StoreFile(QString FileName)
- {
- QSqlQuery query(db);
- QFile File(FileName);
- if(File.open(QIODevice::ReadOnly)){
- QByteArray &tdata = File.readAll();
- QByteArray data = qCompress(tdata,9);
- query.prepare("INSERT INTO files (id,filename,filecontent)"
- "VALUES(NULL,:filename,:filecontent)");
- query.bindValue(":filename", FileName);
- query.bindValue(":filecontent", data);
- if(!query.exec())
- {
- qDebug()<<query.lastError();
- return false;
- }
- }
- else
- {
- return false;
- }
- return true;
- }
基本思想就是把名為FileName的文件裝換成為QByteArray,然后使用第三方的zlib進行最高等級的壓縮,然后存儲
(4)從數據庫中
- bool MyDatabase::GetFile(QString FileName)
- {
- QSqlQuery query(db);
- query.prepare("select filecontent from files");
- query.exec();
- query.next();
- QByteArray tdata = query.value(0).toByteArray();
- QByteArray data = qUncompress(tdata);
- QFile File(FileName);
- if(File.open(QIODevice::WriteOnly))
- {
- File.write(data);
- File.close();
- }
- else
- {
- return false;
- }
- return true;
- }
因為僅僅是嘗試,所以只需讀取一個并把它命名為FileName。基本思想是把存儲在數據庫中的內容轉化為QByteArray,然后解壓,寫入到文件中。
小結:關于解析QT 使用Sqlite存儲讀取文件的內容介紹完了,希望本文對你有所幫助!