qt下使用sqlite数据库存储二进制文件

qt支持小型数据库sqlite,并可存储二进制文件,类型为BLOB,可以将数据一次性存储,而不用频繁操作数据库。

头文件:

#include

#include

库:

Qt5Sqld.lib

当然,如果要运行程序,还需要相应的dll库

Qt5Sql.dll


1、h文件

#ifndef QMYSQL_H
#define QMYSQL_H


#include
#include
#include

#define DATETIME_FORMAT ("yyyy-MM-dd HH:mm:ss")


// 数据库存储与查询类,ypchen,20160516
class QMySql
{
private:
QMySql();


public:
~QMySql();
static QMySql* self();
bool AddAdData(QDateTime dt, QByteArray data);
QMap QueryData();


private:
static QMySql* m_instance;// 单例
QSqlDatabase m_db;// 数据库类
};


#endif // QMYSQL_H

2、cpp文件

QMySql* QMySql::m_instance = NULL;


QMySql::QMySql()
{
m_db = QSqlDatabase::addDatabase("QSQLITE");
m_db.setDatabaseName("curve.db");
bool ret = m_db.open();
qDebug() << "Open db:" << ret << m_db.lastError();
QSqlQuery query;//以下执行相关QSL语句


ret = query.exec("CREATE TABLE IF NOT EXIST Curve(\
ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,\
TIME TEXT NOT NULL,\
AD BLOB NOT NULL\
);");


qDebug() << "Create table:" << ret << m_db.lastError();
}


QMySql::~QMySql()
{
m_db.close();
}


// 单例
QMySql* QMySql::self()
{
if (m_instance == NULL)
{
m_instance = new QMySql();
}
return m_instance;
}


// 保存ad值到数据库
bool QMySql::AddAdData(QDateTime dt, QByteArray data)
{
QSqlQuery query(m_db);
QString strDt = dt.toString(DATETIME_FORMAT);
QString strSql = "INSERT INTO Curve (TIME,AD) VALUES (?,?)";
query.prepare(strSql);
query.bindValue(0, strDt);
int size = data.size();
query.bindValue(1, data, QSql::Binary);


bool ret = query.exec();
qDebug() << "Add data:" << ret << m_db.lastError();


return ret;
}


// 查询数据库中的所有ad值
QMap QMySql::QueryData()
{
QMap dbMap;
QSqlQuery query(m_db);
if (query.exec("SELECT * from Curve"))
{
while (query.next())
{
QString strDt;
QByteArray data;
strDt = query.value(1).toString();
data = query.value(2).toByteArray();
int len = data.size();
dbMap[strDt] = data;
}
}
qDebug() << "Query data:" << m_db.lastError();


return dbMap;
}



你可能感兴趣的:(C++,QT)