修改.pro文件,添加sql
QT += sql添加头文件
#include "QSqlDatabase" #include "QSqlQuery" #include "QSqlError" #include "QDebug" void MainWindow::connect_sqlite() { QSqlDatabase database; database = QSqlDatabase::addDatabase("QSQLITE"); database.setDatabaseName("MyDataBase.db"); //设置数据库名 if (!database.open()){ qDebug() << "Error: Failed to connect database." << database.lastError(); }else{ qDebug() << "Succeed to connect database." ; } //创建表 QSqlQuery sql_query; //不存在则创建表 if(!sql_query.exec("CREATE TABLE information(type varchar(20),time varchar(20),tick int(32),slot1 varchar(32),slot2 varchar(32),slot3 varchar(32),slot4 varchar(32),slot5 varchar(32),slot6 varchar(32),slot7 varchar(32),slot8 varchar(32),slot9 varchar(32),slot10 varchar(32),slot11 varchar(32),slot12 varchar(32) )")){ qDebug() << "Error: Fail to create table."<< sql_query.lastError(); }else{ qDebug() << "Table created!"; } if(!sql_query.exec("CREATE TABLE information8003(type varchar(20),time varchar(20),tick int(32),slot1 varchar(32),slot2 varchar(32),slot3 varchar(32),slot4 varchar(32),slot5 varchar(32),slot6 varchar(32),slot7 varchar(32),slot8 varchar(32),slot9 varchar(32),slot10 varchar(32),slot11 varchar(32),slot12 varchar(32) )")){ qDebug() << "Error: Fail to create table."<< sql_query.lastError(); }else{ qDebug() << "Table created!"; } if(!sql_query.exec("CREATE TABLE information8004(type varchar(20),time varchar(20),tick int(32),slot1 varchar(32),slot2 varchar(32),slot3 varchar(32),slot4 varchar(32),slot5 varchar(32),slot6 varchar(32),slot7 varchar(32),slot8 varchar(32),slot9 varchar(32),slot10 varchar(32),slot11 varchar(32),slot12 varchar(32))")){ qDebug() << "Error: Fail to create table."<< sql_query.lastError(); }else{ qDebug() << "Table created!"; } }向数据库插入数据
void SqlitLog::recLog() { QSqlQuery query; if(QSqlDatabase::database().driver()->hasFeature(QSqlDriver::Transactions)) //先判断该数据库是否支持事务操作 { if(QSqlDatabase::database().transaction()) //启动事务操作 { //QString recMsg = QString("insert into information values(\"aaaa\",\"bbbb\",\"cccc\")"); QString recMsg = QString("insert into information values('%1','%2','%3')") .arg("aaaa").arg("bbbb").arg("cccc"); query.exec(recMsg); //数据库执行SQL语句 if(!QSqlDatabase::database().commit()) { qDebug() << QSqlDatabase::database().lastError(); //提交失败的错误 if(!QSqlDatabase::database().rollback()) qDebug() << QSqlDatabase::database().lastError(); //回滚失败的错误 } } } } //当数据量小时,可以不要启动事务操作,可以直接执行query.exec(recMsg); //当数据量大时,启动事务操作可以节省大量时间删除数据 和添加数据类似,将添加语句改为删除语句即可,根据自己需求写入删除语句
QSqlQuery query; QString recMsg = QString("delete from information where id = 1"); query.exec(recMsg);更新数据 和以上类似
QSqlQuery query; QString recMsg = QString("update information set type = \"0x8004\" where id = 1"); query.exec(recMsg);查询语句
QSqlQuery query; QString recMsg = QString("select * from information"); QSqlRecord record; QString drawData; QStringList drawTimeList; QStringList drawTickList; query.exec(recMsg); //循环获取模型中每一行的数据 while(query.next()){ record = query.record(); //每一个slot的前面24位为输入/输出点的数据,然后选择相应的输入/输出点 drawData.append(record.value(QString("slot%1").arg(slot + 1)).toString().at(id)); //选择对应IO板中对应IO点的数据 drawTimeList.append(record.value("time").toString()); //获取数据中每一行的时间并插入链表 drawTickList.append(record.value("tick").toString()); //获取数据中每一行的tick值并插入链表 }删除表
if(!sql_query.exec("drop table student")) { qDebug() << sql_query.lastError(); }else{ qDebug() << "table cleared"; }关闭数据库
QSqlDatabase::database().close();