博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt开发之路——SQlite的使用(简单粗暴)
阅读量:677 次
发布时间:2019-03-17

本文共 3772 字,大约阅读时间需要 12 分钟。

SQlite是一个轻便的数据库,在Qt中有内置驱动,无需安装即可使用,非常方便。本文内容包括数据库的建创建,连接,打开,数据表的创建,数据表内容的增删查操作。涉及的代码均为自己做的项目中的,没有考虑代码屯余问题,注释清晰,方便学习理解,有任何问题可以留言,共同进步~

ok,上才艺~

首先

QT += sql

数据库的创建,连接和打开

qt_sql_default_connection是数据库默认名

void Widget::createDatabase(){
//create and connect the database QSqlDatabase database; if (QSqlDatabase::contains("qt_sql_default_connection")) {
database = QSqlDatabase::database("qt_sql_default_connection"); } else {
database = QSqlDatabase::addDatabase("QSQLITE"); database.setDatabaseName("MyDataBase.db"); } //open the database if (!database.open()) {
qDebug() << "Error: Failed to connect database." << database.lastError(); } else {
qDebug() <<"数据库连接成功!"<<"从数据库读取数据."; }}

数据库准备,数据表创建,插入数据

操作表之前要做好数据库的准备,这里的数据插入是我项目中涉及到的一个treewidget中的数据,当然可以直接插入数据,仅供参考

void Widget::writeDatabase(){
//create and connect database QSqlDatabase database; if (QSqlDatabase::contains("qt_sql_default_connection")) {
database = QSqlDatabase::database("qt_sql_default_connection"); } else {
database = QSqlDatabase::addDatabase("QSQLITE"); database.setDatabaseName("MyDataBase.db"); } //create table QSqlQuery sql_query;//set id text primary key //judge table exist or not bool isTableExist = \ sql_query.exec(QString("select count(*) from realdata where type='table' and name='%1'").arg(("realdata"))); if(!isTableExist){
if(!sql_query.exec("create table realdata(id text,manufacturer text,powerstate text,serveritynum text,uuid text,health text)")) {
qDebug() << "Error: Fail to create table."<< sql_query.lastError(); } else {
qDebug() << "Table created!"; } } else{
} //ergodic the treewidget item,insert the data into database QTreeWidgetItemIterator it(ui->treeWidget->currentItem()); while(*it){
(*it)->setHidden(false); QTreeWidgetItem *item = *it; if(!sql_query.exec(QString("INSERT INTO realdata VALUES('%1','%2','%3','%4','%5','%6')").arg(item->text(0)).arg(item->text(1)).arg(item->text(2)).arg(item->text(3)).arg(item->text(4)).arg(item->text(5)))) {
qDebug() << "insert !!" <

删除整个数据表

操作表之前要做好数据库的准备,本函数可用于清楚所有数据,类似于一键删除的功能

void Widget::deleteRealData(){
//create and connect database QSqlDatabase database; if (QSqlDatabase::contains("qt_sql_default_connection")) {
database = QSqlDatabase::database("qt_sql_default_connection"); } else {
database = QSqlDatabase::addDatabase("QSQLITE"); database.setDatabaseName("MyDataBase.db"); } //delete the table QSqlQuery sql_query; sql_query.exec("drop table realdata"); if(sql_query.exec()) {
qDebug() << sql_query.lastError(); } else {
qDebug() << "table cleared"; }}

查看数据

查看数据之后是对treewidget的使用,仅供参考

void Widget::readRealData(){
createDatabase(); //read data QSqlQuery sql_query; sql_query.exec("select * from realdata"); if(!sql_query.exec()) {
qDebug()<
treeWidget,strs); //set the header to appropriate size QHeaderView *head=ui->treeWidget->header(); head->setSectionResizeMode(QHeaderView::ResizeToContents); ui->treeWidget->setCurrentItem(strsroot);//set currentitem } qDebug()<<"成功显示在界面上."; }}

走过的冤枉路——SQL语句

一定要注意一点!!!sql语句中用到arg时,%1要带‘’,也就是’%1’,’%2’,否则会报错,QSqlError(“1“, “Unable to execute statement“, “near \“.73\“: syntax error“)

参考

这两篇参考写的比较好,可以看一看
https://blog.csdn.net/weixin_41656968/article/details/80473137
https://www.cnblogs.com/xia-weiwen/archive/2017/05/04/6806709.html

你可能感兴趣的文章