本文共 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