Qt-sqlite数据库实战
一、Qt数据库实战Demo实验目的:掌握QDataBase类的使用方法 掌握Qt与SQlite的连接方法 掌握QTablewidget等项视图类的使用方法 实验内容:1.QT的连接与查询数据库的方法,查看表的使用 2.使用窗体编辑记录的方法以及在表中显示数据的方式 实验步骤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); } 运行截图: |