一、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.使用窗體編輯記錄的方法以及在表中顯示數據的方式
窗體編輯記錄主要使用到信號與槽、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 <QWidget>
#include <qsql.h>
#include <QSqlError>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlDriver>
#include <QDebug>
#include <QFile>
#include <QSqlQueryModel>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QMessageBox>
#include <QTableView>
#include <QHBoxLayout>
#include <QVBoxLayout>
class Widget : public QWidget
{
Q_OBJECT
public:
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
實現代碼:
</pre><pre name="code" class="cpp">
#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()<<s;
if(s)
{
QMessageBox::warning(this,"Error","conduct successful");
return false;
}
QMessageBox::information(this,"message","conduct successful!");
return true;
}
bool Widget::SelectData()
{
QSqlQuery query;
bool success = query.exec("select * from test_table");
if(!success)
{
return false;
}
while(query.next())//query.next()指向查找到的第一條記錄,然後每次後移一條記錄
{
QString ele0=query.value(0).toString();//query.value(0)是id的值,將其轉換爲int型
QString ele1=query.value(1).toString();
qDebug()<<ele0<<ele1;//輸出兩個值
}
return true;
}
bool Widget::deleData(QString id, QString name)
{
QSqlQuery query;
QString str;
str = "delete from test_table where id ='";
str += id;
str +="' and name ='";
str += name;
str +="'";
//測試專用
qDebug() << str;
bool s = query.exec(str);
qDebug()<<s;
if(!s)
{
return false;
}
return true;
}
bool Widget::updData(QString id, QString name)
{
QSqlQuery query;
QString str;
str = "update test_table set name ='";
str += name;
str +="' where id ='";
str += id;
str +="'";
//測試專用
qDebug() << str;
bool s = query.exec(str);
qDebug()<<s;
if(!s)
return false;
return true;
}
void Widget::addData()
{
QString Gid, Gname;
Gid = idLine->text();
Gname = nameLine->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);
}