一.Qt对数据库的支持
Qt中的数据库模块QtSql模块提供了对数据库的支持,该模块中的众多类基本上可分为3层:
- 1.用户接口层
- QSqlQueryModel :Read-onlydatamodelforSQLresultsets
QSqlTableModel :Editabledatamodelforasingledatabasetable QSqlRelationalTableModel :Editabledatamodelforasingledatabasetable,withforeignkeysupport
- 2.SQL接口层
- QSqlDatabase
- QSqlError
- QSqlField
- QSqlIndex
- QSqlQuery
- QSqlRecord
- QSqlRelation
- QSqlRelationalDelegate
- 3.sql驱动层
- QSqlResult
- QSqlDriver
- QSqlDriverCreator
- QSqlDriverCreatorBase
- QSqlDriverPlugin
用户接口层:
这个层中的几个类实现了将数据库中的数据链接到窗口部件上,这些类是使用模型/框架来实现的,它们是高层次的抽象,不熟SQL也可以来操作数据库.
SQL 接口层:
提供了对数据库的访问.
驱动层:
为具体的数据库和SQL接口层提供了底层的桥梁.
二.Qt下连接数据库的方法
- //指定连接数据库的驱动
- QSqlDatabasedb=QSqlDatabase::addDatabase("QSQLITE");
- //连接到的主机名
- db.setHostName("bigblue");
- //连接到的数据库名称
- db.setDatabaseName("flightdb");
- //用户名
- db.setUserName("acarlson");
- //密码
- db.setPassword("123456");
- boolok=db.open();
三.Qt驱动数据库的实例
3.1工程文件:database.pro
- SOURCES+=
- main.cpp
- QT+=sql
- HEADERS+=
- connection.h
3.2头文件:connection.h
- #ifndefCONNECTION_H
- #defineCONNECTION_H
- #include<QMessageBox>
- #include<QSqlDatabase>
- #include<QSqlQuery>
- staticboolcreateConnection()
- {
- QSqlDatabasedb=QSqlDatabase::addDatabase("QSQLITE");
- db.setDatabaseName(":memory:");
- if(!db.open()){
- QMessageBox::critical(0,"Cannotopendatabase",
- "Unabletoestablishadatabaseconnection.",QMessageBox::Cancel);
- returnfalse;
- }
- QSqlQueryquery;
- query.exec("createtablestudent(idintprimarykey,"
- "namevarchar(20))");
- query.exec("insertintostudentvalues(0,'LiMing')");
- query.exec("insertintostudentvalues(1,'LiuTao')");
- query.exec("insertintostudentvalues(2,'WangHong')");
- returntrue;
- }
- #endif//CONNECTION_H
3.3主文件main.cpp
- #include<QApplication>
- #include<QSqlDatabase>
- #include<QDebug>
- #include<QStringList>
- #include"connection.h"
- #include<QVariant>
- intmain(intargc,char*argv[])
- {
- QApplicationa(argc,argv);
- //创建数据库连接
- if(!createConnection())return1;
- //使用QSqlQuery查询整张表
- QSqlQueryquery;
- query.exec("select*fromstudent");
- while(query.next())
- {
- qDebug()<<query.value(0).toInt()<<query.value(1).toString();
- }
- returna.exec();
- }
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|