Qt应用程序开发4(数据库应用)_第1页
Qt应用程序开发4(数据库应用)_第2页
Qt应用程序开发4(数据库应用)_第3页
Qt应用程序开发4(数据库应用)_第4页
Qt应用程序开发4(数据库应用)_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Neusoft Institute of InformationQt应用程序开发 Qt4程序设计基础 Qt Designer应用 QMainWindow、QDialog、Layout Qt4数据库应用数据库应用 Qt4多线程应用 Qt4定时器 Qt4事件处理 Qt4网络编程 QSS样式设计 QGraphics View应用 自定义控件Neusoft Institute of InformationQt4 数据库应用lQt4连接数据库过程连接数据库过程lQt4与MySQL数据库的连接lQt4与SQLite数据库的连接l对数据库的操作-SQL语句lQt4中SQL模型Neusoft Institut

2、e of Information #include Qt4中提供了QtSql模块。 为访问数据库提供了平台和相应的接口 提供模型视图体系,来完成可视化的信息输入 必须在.pro文件中加上:Qt += sqlQt4连接数据库过程Neusoft Institute of InformationQt SQL模块中连接并处理数据库被分成三个层次。 第一层是数据库的驱动程序。 第二层是数据库的连接层。实现对数据库的连接,对数据库操作结果、错误信息的进行处理。 第三层是用户接口层。提供了一套模型视图体系来完成对数据库的可视化操作。Qt4连接数据库过程Neusoft Institute of Informa

3、tionQt4中为多种数据库提供了本地驱动程序,见下表:DriverDatabaseQDB2IBM DB2 version7.1 and laterQIBASEBorland InterBaseQMYSQLMySQLQOCIOracle(Oracle Call Interface)QODBCODBC(includes Microsoft SQL server)QPSQLPostgreSQL version 6.x and 7.xQSQLITESQLite version 3 and laterQSQLITE2SQLite version 2QTDSSybase Adaptive ServerQ

4、t4连接数据库过程Neusoft Institute of InformationQt4 数据库应用lQt4连接数据库过程lQt4与与MySQL数据库的连接数据库的连接lQt4与SQLite数据库的连接l对数据库的操作-SQL语句lQt4中SQL模型Neusoft Institute of Information #include 用QSqlDatabase类通过驱动程序建立起和数据库的连接 设置hostName,databaseName,username,password等属性 打开数据库 操作数据库 关闭数据库Qt4与MySQL数据库的连接Neusoft Institute of Info

5、rmationQSqlDatabase db = QSqlDatabase:addDatabase(“QMYSQL”););db.setHostName(“localhsot”););db.setDatabaseName(“testmysql.db”););db.setUserName(“user”););db.setPassword(“password”););if(!(!db.open())QMessageBox:critical(0,cannot open database,Unabel to connect,QMessageBox:Cancel); Qt4与MySQL数据库的连接Neu

6、soft Institute of InformationQt4 数据库应用lQt4连接数据库过程lQt4与MySQL数据库的连接lQt4与与SQLite3数据库的连接数据库的连接l对数据库的操作-SQL语句lQt4中SQL模型Neusoft Institute of Information SQLite的驱动程序是QSQLITE。 SQLITE数据库不是基于服务器的,不需要设置username,password等属性,只要制定databaseName就可以了。QSqlDatabase db = QSqlDatabase:addDatabase(“QSQLITE”);db.setDatabas

7、eName(“testsqlite.db”);if(!db.open())QMessageBox:critical(0,cannot open database,Unabel to connect,QMessageBox:Cancel);Qt4与SQLite3数据库的连接Neusoft Institute of Information SQLite数据库的一个优良特性是它可以在内存中建立,操作快,省去了对磁盘的读写。把数据库保留在内存中,可以通过这样的代码来实现: db.setDatabaseName(“:memory:”); 结束对数据库的操作,用close方法来实现关闭数据库。Qt4与SQ

8、Lite3数据库的连接Neusoft Institute of InformationQt4 数据库应用lQt4连接数据库过程lQt4与MySQL数据库的连接lQt4与SQLite数据库的连接l对数据库的操作对数据库的操作-SQL语句语句lQt4中SQL模型Neusoft Institute of Information用QSqlQuery对象来执行SQL命令来对数据库操作。 QSqlQuery类中提供了多个函数来操作结果集。QSqlQuery query;query.exec(“SELECT * FROM teacher”);exec()方法执行之后,能够获得相应的执行结果集,集合记录从0开

9、始编号。first():指向结果集的第一条记录。last():指向结果集的最后一条记录。next():指向下一条记录,每执行一次便指向相邻的下一条记录。previous():指向上一条记录,每执行一次便指向相邻的上一条记录seek(int n):指向结果集第n条记录。record():获得现在指向的记录。对数据库的操作-SQL语句Neusoft Institute of Information通过next()方法来指定结果集的第一条记录,依次访问后续的记录,直到最后一条记录,next()方法返回false。如果查询失败或者查询的结果集为空,那么next()返回值也为false。while(qu

10、ery.next() /获取query所指向的记录在结果集中的编号 qDebug(rowNum is:%d,query.at();/获取id属性的值,并转换成int型 qDebug(id is:%d,query.value(0).toInt(); 对数据库的操作-SQL语句Neusoft Institute of Information在SQL语句中使用变量prepare()函数,利用”:id”和”:name”代替具体的数据bindValue()函数给id,name赋值,为绑定操作,可以将用编号或实际的字段名代替。如: query.prepare(insert into student(id,

11、name) values(:id,:name); query.bindValue(:id,4); query.bindValue(:name,stu4); query.exec();对数据库的操作-SQL语句Neusoft Institute of Information当要进行多条记录的操作时,可以利用绑定进行批操作 QSqlQuery query; QVariantList ints; QVariantList names; query.prepare(insert into student values(?,?); ints56; namesstu5stu6”; query.addBin

12、dValue(ints); query.addBindValue(names); query.execBatch();对数据库的操作-SQL语句Neusoft Institute of InformationQt4 数据库应用lQt4连接数据库过程lQt4与MySQL数据库的连接lQt4与SQLite数据库的连接l对数据库的操作-SQL语句lQt4中中SQL模型模型Neusoft Institute of InformationQt中提供了模型类和模型/视图框架,使用这些模型,用户设置完成对数据库的SQL语句,自动的向视图表中添加数据,可视化的操作数据库。Qt提供了三种SQL模型。(1)QSq

13、lQueryModel:为SELECT SQL语句结果集提供只读数据模型(2)QSqlTabelModel:为单个数据库表提供可编辑的数据模型。(3)QSqlRelationModel:为单个数据库表提供可编辑的数据模型,同时可以和其他数据库表产生关联。Qt4中SQL模型Neusoft Institute of InformationQSqlQueryModelQSqlQueryModel 模型创建一个实例对象,用setQuery方法设定查询条件,把查询的结果通过一个视图(QTableView)表显示出来。#include#includeQSqlQueryModel *model = new

14、QSqlQueryModel();model-setQuery(“SELECT ID, name FROM teacher”);QTableView *view = new QTableView();view-setModel(model);view-show(); Neusoft Institute of InformationQSqlQueryModel例子例子static bool createtable() QSqlQuery query; query.exec(create table student (id integer primary key,name varchar(10);

15、 query.exec(insert into student values(1,stu1); query.exec(insert into student values(2,stu2); query.exec(insert into student values(3,stu3); return true;Neusoft Institute of InformationQSqlQueryModel例子例子static bool createconnect() QSqlDatabase db =QSqlDatabase:addDatabase(QSQLITE); db.setDatabaseNa

16、me(test.db); if(!db.open() QMessageBox:critical(0,cannot open database,Unabel to connect,QMessageBox:Cancel); return false; createtable(); return true;Neusoft Institute of InformationQSqlQueryModel例子例子int main(int argc, char *argv) QApplication a(argc, argv); createconnect(); Widget w; w.show(); ret

17、urn a.exec();Neusoft Institute of InformationQSqlQueryModel例子例子Widget:Widget(QWidget *parent) : QWidget(parent), ui(new Ui:Widget) ui-setupUi(this); Initdata();void Widget:Initdata() this-model = new QSqlQueryModel(0); this-model-setQuery(select * from student); this-model-setHeaderData(0,Qt:Horizon

18、tal,tr(id); this-model-setHeaderData(1,Qt:Horizontal,tr(name); this-ui-tableView-setModel(model); this-ui-tableView-show();Neusoft Institute of InformationQSqlTableModel为单个数据库表提供可编辑的数据模型。常用功能:修改、插入、删除、查询和排序使用该类可以完全脱离SQL语句。包括头文件#includeQSqlTableModel初始化QSqlTableModelQSqlTableModel *model=new QSqlTabl

19、eModel(); model=new QSqlTableModel(); model-setTable(appliance); model-setEditStrategy(QSqlTableModel:OnManualSubmit); model-select(); ui-tableView-setModel(model);Neusoft Institute of InformationQSqlTableModel-增加操作model-setEditStrategy(QSqlTableModel:OnManualSubmit);上述表示手动修改提交之后,才能生效。例子:增加一条空记录void

20、 Widget:on_Button_add_clicked() int row=this-model-rowCount(); this-model-insertRow(row);Neusoft Institute of InformationQSqlTableModel-修改操作在QSqlTableModel模型中,修改操作时,涉及到事务操作。事务是用户定义的一个数据库操作序列,这些是一个不可分割的工作单位(原子操作)。在Qt中用transaction()开始一个事务操作,用commit()函数或rollback()函数进行结束。commit()表示提交,即提交事务的所有操作。具体地说就是将事

21、务中所有对数据库的更新写回到数据库,事务正常结束。rollback()表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有已完成的操作全部撤销,回滚到事务开始时的状态。Neusoft Institute of Informationvoid Widget:on_Button_Edit_clicked() this-model-database().transaction(); int ok = QMessageBox:question(this,tr(提示提示),tr(确定修改吗?确定修改吗?),QMessageBox:Yes|QMessageBox:No

22、); if(ok = QMessageBox:Yes) if(this-model-submitAll() this-model-database().commit(); else this-model-database().rollback(); else this-model-revertAll();QSqlTableModel-修改操作Neusoft Institute of InformationQSqlTableModel-修改操作submitAll()表示提交所有待定的操作。revertAll()表示恢复/撤销所有待定的操作。如果出现中文乱码的情况,解决方法为:在main()函数中

23、加入QTextCodec:setCodecForTr(QTextCodec:codecForName(“GB18030”);需要包含头文件#includeQTextCodecNeusoft Institute of InformationQSqlTableModel-修改操作QSqlTabelModel模型可以将所有修改先保存到model中,只有当执行事务操作的model-database().commit()后,才会真正写入数据库。需要在QSqlTableModel初始化时,设定model-setEditStrategy(QSqlTableModel:OnManualSubmit); OnM

24、anualSubmit 表明我们要提交修改才能使其生效。Neusoft Institute of InformationQSqlTableModel-删除操作void Widget:on_Button_delete_clicked()int currentRow = ui-tableView-currentIndex().row(); /获取选中的行获取选中的行 this-model-removeRow(currentRow); /删除该行删除该行 int ok = QMessageBox:warning(this,tr(Delete?),tr(确认删除?确认删除?),QMessageBox:Yes|QMessageBox:No); if(ok = QMessageBox:Yes) this-model-submitAll();/提交并删除数据库中该记录提交并删除数据库中该记录 else this-model-revertAll();/撤销该操作撤销该操作Neusoft Institute of Inform

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论