一、Qt数据库实战Demo
实验目的:
掌握QDataBase类的使用方法
掌握QTablewidget等项视图类的使用方法
实验内容:
实验步骤
1.QT的连接与查询数据库的方法,查看表的使用
连接数据库:
QsqlDatabasedb=QsqlDatabase::addDatabase("QsqlITE");
db.setDatabaseName("test.db");
QsqlQueryquery;
if(!db.open())
{
qDebug()<<"Can'topen!";
}
else
qDebug()<<"canopen!";
QsqlQueryquery;
query.exec(“/*sql语句*/”)
查询语句:
insertintotest_tablevalues('2','he')
deletefromtest_tablewhereid='0'andname='first'
updatetest_tablesetname='first'whereid='3'
查看表的使用:
select条件from表名where条件
2.使用窗体编辑记录的方法以及在表中显示数据的方式
窗体编辑记录主要使用到信号与槽、QLineEdit,主要是通过通过lineedit->text().tostring进行转化然后结合sql语句进行操作,通过click事件触发相应的槽函数的触发实现。
在表中显示数据的方式
QsqlQueryModel();
modal->setQuery("select*fromtest_table");
tableview=newQTableView;
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,SLOT(deleteData())); connect(updateBtn,SLOT(updateData())); connect(refreshBtn,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,"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); }