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);
}
运行截图:
文章图片
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 数据库设计与优化
- 《机器学习实战》高清中文版PDF英文版PDF+源代码下载
- 数据库总结语句
- --木木--|--木木-- 第二课作业#翼丰会(每日一淘6+1实战裂变被动引流# 6+1模式)
- MySql数据库备份与恢复
- 数据库|SQL行转列方式优化查询性能实践
- 2020-07-29《吴军·阅读与写作50讲》24实战才能转化效能
- MySQL数据库的基本操作
- springboot整合数据库连接池-->druid