Qt-sqlite数据库实战

一、Qt数据库实战Demo 实验目的:掌握QDataBase类的使用方法
掌握Qt与SQlite的连接方法
掌握QTablewidget等项视图类的使用方法
实验内容:1.QT的连接与查询数据库的方法,查看表的使用
2.使用窗体编辑记录的方法以及在表中显示数据的方式
实验步骤
1.QT的连接与查询数据库的方法,查看表的使用连接数据库:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("test.db");
QSqlQuery query;
if(!db.open())
{
qDebug()<<"Can't open !";
}
else
qDebug()<<"can open !";
查询数据库:
QSqlQuery query;
query.exec(“/*sql语句*/”)
查询语句:
insert into test_table values('2','he')
delete from test_table where id ='0' and name ='first'
update test_table set name ='first' where id ='3'
查看表的使用:
select 条件 from 表名 where 条件
2.使用窗体编辑记录的方法以及在表中显示数据的方式 【Qt-sqlite数据库实战】窗体编辑记录主要使用到信号与槽、QLineEdit,主要是通过通过lineedit->text().tostring进行转化然后结合sql语句进行操作,通过click事件触发相应的槽函数的触发实现。

在表中显示数据的方式
QSqlQueryModel();
modal->setQuery("select * from test_table");
tableview = new QTableView;
tableview->setModel(modal);
实战代码详解:

#ifndef WIDGET_H #define WIDGET_H#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include class Widget : public QWidget { Q_OBJECTpublic: Widget(QWidget *parent = 0); ~Widget(); public: void ConnectDB(); bool CreateTB(); bool InsertData(QString id, QString name); bool SelectData(); bool deleData(QString id, QString name); bool updData(QString id, QString name); private slots: void addData(); void deleteData(); void updateData(); void refreshData(); private: QPushButton *addBtn; QPushButton *delteBtn; QPushButton *updateBtn; QPushButton *refreshBtn; QLineEdit *idLine; QLineEdit *nameLine; QLabel *id; QLabel *name; QSqlQueryModel *modal; QTableView *tableview; }; #endif // WIDGET_H

实现代码:


#include "widget.h"Widget::Widget(QWidget *parent) : QWidget(parent) {ConnectDB(); CreateTB(); addBtn = new QPushButton(tr("add")); delteBtn = new QPushButton(tr("delete")); updateBtn = new QPushButton(tr("update")); refreshBtn = new QPushButton(tr("refresh")); idLine = new QLineEdit; nameLine = new QLineEdit; id = new QLabel(tr("id:")); name = new QLabel(tr("name:")); modal = new QSqlQueryModel(); modal->setQuery("select * from test_table order by id"); tableview = new QTableView; tableview->setModel(modal); QHBoxLayout *hbox1 = new QHBoxLayout; hbox1->addWidget(addBtn); hbox1->addWidget(delteBtn); hbox1->addWidget(updateBtn); hbox1->addWidget(refreshBtn); QHBoxLayout *hbox2 = new QHBoxLayout; hbox2->addWidget(id); hbox2->addWidget(idLine); hbox2->addWidget(name); hbox2->addWidget(nameLine); QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(tableview); vbox->addLayout(hbox1); vbox->addLayout(hbox2); setLayout(vbox); connect(addBtn,SIGNAL(clicked()),this,SLOT(addData())); connect(delteBtn,SIGNAL(clicked()),this,SLOT(deleteData())); connect(updateBtn,SIGNAL(clicked()),this,SLOT(updateData())); connect(refreshBtn,SIGNAL(clicked()),this,SLOT(refreshData())); }void Widget::ConnectDB() { QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("test.db"); QSqlQuery query; if(db.open()) { qDebug()<<"open !"; } else { qDebug()<<"can't open !"; }}bool Widget::CreateTB() { QSqlQuery query; bool success = query.exec("create table if not exists test_table (id int primary key, name varchar)"); if(!success) { qDebug()<<"create table false"; qDebug() << query.lastError().text(); return false; } else { qDebug()<<"create table success"; QMessageBox::warning(this,"Error","create successful"); return true; } }bool Widget::InsertData(QString id, QString name) { QSqlQuery query; QString str; str = "insert into test_table values('"; str += id; str += "','"; str += name; str += "')"; //测试专用 qDebug() << str; bool s = query.exec(str); qDebug()text(); InsertData(Gid, Gname); }void Widget::deleteData() {QString Did,Dname; Did = idLine->text(); Dname = nameLine->text(); deleData(Did,Dname); }void Widget::updateData() { QString Uid,Uname; Uid = idLine->text(); Uname = nameLine->text(); updData(Uid,Uname); }void Widget::refreshData() { modal->setQuery("select * from test_table order by id"); //tableview = new QTableView; tableview->setModel(modal); }

运行截图:
Qt-sqlite数据库实战
文章图片

    推荐阅读