qt下使用sqlite数据库存储二进制文件
qt支持小型数据库sqlite,并可存储二进制文件,类型为BLOB,可以将数据一次性存储,而不用频繁操作数据库。 头文件: #include <QtSql/QSqlDatabase> #include <QtSql> 库: Qt5Sqld.lib 当然,如果要运行程序,还需要相应的dll库 Qt5Sql.dll
1、h文件 #ifndef 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<QString,QByteArray> QMySql::QueryData() { QMap<QString,QByteArray> 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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |