Qt使用SQLite数据库,客户端使用DB Browser
客户端使用 DB Browser,下载地址 Downloads - DB Browser for SQLite (sqlitebrowser.org) 。打开后创建db数据库、表等,很容易操作。
【注意】
1、db文件路径有中文的话,加入 #pragma execution_character_set("utf-8")
2、sql语句对象必须与db数据库关联,否则语句可能不知道操作的哪个db。即 QSqlQuery sql_query(db);
Console项目不加也没问题,但是MainWindow项目会报 QSqlQuery::prepare: database not open 错误。所以推荐加上 QSqlQuery sql_query(db);
3、pro中添加 QT += sql 代码文件中 #include<QtSql>
【Qt操作SQLite代码】
新建Qt Console Application项目,pro中添加 QT += sql
main.cpp内容如下,基本步骤加粗显示。
#include <QCoreApplication> #include<QtSql> //引入头文件 #pragma execution_character_set("utf-8") //路径有中文 int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QSqlDatabase db; db = QSqlDatabase::addDatabase("QSQLITE"); //加载SQLite驱动 db.setDatabaseName("D:/数据库/school.db");//连接数据库,若无则自动创建 if (!db.open())//判断数据库是否打开 { qDebug() << "Error: Failed to connect database." << db.lastError(); } else { QSqlQuery sql_query(db); //sql语句对象与具体的db对象关联 QString select_all_sql="select * from table1";//查询表table1所有内容 sql_query.exec(select_all_sql);//执行命令 while (sql_query.next()) //逐行检索 { int id=sql_query.value(0).toInt(); QString name=sql_query.value(1).toString(); qDebug()<<QString("id:%1 name:%2").arg(id).arg(name); } } return a.exec(); }
下面关于 插入 和 修改
QSqlDatabase db; db = QSqlDatabase::addDatabase("QSQLITE"); //加载SQLite驱动 db.setDatabaseName("C:/数据库/Data.db");//连接数据库,若无则自动创建 if (!db.open())//判断数据库是否打开 { qDebug() << "Error: Failed to connect database." << db.lastError(); } else { QSqlQuery sql_query(db); QTime t; t.start(); //插入 sql_query.prepare("insert into result values(?,?,?,?,?)"); //使用占位符 ? QString xh="MFA05L"; QString ph="210704"; QString xlh="000016"; QString now=QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"); QString Key=xh+ph+xlh; sql_query.bindValue(0,xh); //第1个占位符 sql_query.bindValue(1,ph); sql_query.bindValue(2,xlh); sql_query.bindValue(3,now); sql_query.bindValue(4,Key); if(!sql_query.exec()) { qDebug()<<"Error: Failed to insert."<<sql_query.lastError(); //若重复插入,则只更新日期 sql_query.clear(); sql_query.prepare(QString("update result set 检测日期='%1' where 键='%2'").arg(now).arg(Key)); //等同下2行 //sql_query.prepare(QString("update result set 检测日期=? where 键='%1'").arg(Key)); //sql_query.bindValue(0,now); if(!sql_query.exec()) { qDebug()<<"Error: Failed to update."<<sql_query.lastError(); } } qDebug()<<"耗时"<<t.elapsed();//输出消耗的时间 //查询 QString select_all_sql="select * from result";//查询表table所有内容 sql_query.exec(select_all_sql);//执行命令 while (sql_query.next()) //逐行检索 { QString key=sql_query.value(3).toString(); qDebug()<<key; } }
【其他内容,参考博客】