没有合适的资源?快使用搜索试试~ 我知道了~
QT中SQL的资料,适合数据库的开发
4星 · 超过85%的资源 需积分: 16 85 下载量 33 浏览量
2008-11-23
22:21:16
上传
评论
收藏 671KB PDF 举报
温馨提示
试读
32页
一份有关qt数据库的文档,基本集合了所有qt中有关数据库的知识,很适合用到qt的sql方面的知识
资源推荐
资源详情
资源评论
SQL 模块
这个模块是 Qt 企业版的一部分。
介绍
SQL 模块架构
SQL 驱动程序插件
连接数据库
连接单一数据库
o 连接多个数据库
使用 QSqlQuery 执行 SQL 命令
o 事务处理
o 基本浏览
o 基本数据处理
o 定位数据集
使用 QSqlCursor
o 检索记录
排序和过滤记录
提取数据
o 处理记录
插入记录
更新记录
删除记录
基于数据的窗口部件
o 基于数据的表
o 创建基于数据的窗体
显示记录
在数据窗体中显示记录
编辑记录
o 自定义编辑器窗口部件
为表格自定义编辑器窗口部件
继承 QSqlCursor
实例表
介绍
Qt 的 SQL 类帮助你给你的 Qt 应用程序提供无缝的数据库集成。
这个概述假设你已经至少有一些 SQL 的基础知识。你需要能够理解简单的
SELECT、INSERT、UPDATE 和 DELETE 命令。尽管 QSqlCursor 类提供了数据库浏览
和编辑的界面不
需要
SQL 的知识,但是对于 SQL 的基本理解还是被高度推荐的。
一本 SQL 数据库的标准文本是 C. J. Date 所作的
《数据库系统的介绍》(第七版)
,
ISBN 0201385902。
本文所描述的实例是从完全人工编写代码的角度出发的,你还可以参考 Qt
设计
器
的用户手册中“创建数据库应用程序”这一节,它提供了更高层次的实现方法来
演示窗口部件、执行挖掘和处理外键查找等相关的操作。
这份文档被分为六个部分:
SQL 模块架构。描述了这些类是如何结合在一起的。
连接数据库。这部分解释了如何使用 QSqlDatabase 类建立数据库连接。
执行 SQL 命令。描述如何执行标准的数据操作命令,比如 SELECT、INSERT、UPDATE
和 DELETE。(当然任何有效的 SQL 指令均可被送往数据库)。焦点在于用
QSqlQuery 进行交互处理。
使用游标。描述如何使用 QSqlCursor 类来实现更为强大的应用编程接口函数而
不象在 QSqlQuery 中执行 SQL 语句。
基于数据的窗口部件。描述如何把数据库与用户接口链接起来。在这一节中我们
介绍 QDataTable、QSqlForm、QSqlPropertyMap 和 QSqlEditorFactory 类,演示如
何使用自定义的基于数据的窗口部件。Qt
设计器
提供了一个方便的可视化途径
来实现同样的事情。请参考 Qt
设计器
的手册,更多的详细情况请见 QDataBrowser
和 QDataView。
继承 QSqlCursor。本节给出了继承 QSqlCursor 的实例。继承类可为字段提供默
认值与计算字段等功能(比如以一个自动数值为主键的索引列),以及显示计算
字段等等的内容。比如显示一个名称而不是一个外键的标识符。
这个文档中所使用的表的定义的所有实例都在实例表部分。
SQL 模块架构
SQL 类分成以下三层:
用户接口层。
这些类提供了基于数据的窗口部件,这些窗口部件不仅连接数据库
还可为用户所浏览。(以 QSqlCursor 作为数据源)。终端用户通过这些组件来浏
览与编辑数据。Qt
设计器
集成了这些类并可用来创建基于数据的窗体。这些窗
口部件也可在程序中与你的 C++代码直接交互。支持这一层的类包括
QSqlEditorFactory、QSqlForm、QSqlPropertyMap、QDataTable、QDataBrowser
和 QDataView。
SQL
应用编程接口层。
这些类存取数据库。QSqlDatabase 类用来连接数据库。数
据交互的实现要么通过 QSqlQuery类以 SQL语句来实现,要么用 QSqlCursor类,
它封装了 SQL 命令集。除了 QSqlDatabase、QSqlCursor 和 QSqlQuery 这些类外,
QSqlError、QSqlField、QSqlIndex 和 QSqlRecord 也支持该层。
驱动程序层。
本层由三个类组成:QSqlResult、QSqlDriver 和
QSqlDriverFactoryInterface。这个层在数据库和 SQL 类之间提供了底层的桥梁。
这个层的文档是另外的,因为它只和驱动程序编写者有关,并且在标准数据库应
用程序编程中很少用到。对于实现 Qt 的 SQL 驱动程序插件的详细情况请参考这
里。
SQL 驱动程序插件
Qt 的 SQL 模块可以在运行期动态地装载新的驱动程序,这是通过插件实现的。
SQL 驱动程序文档描述了如何为一个特定的数据库建立相应的插件。
一旦该插件被建立,Qt 可以自动地装载它,之后就可为 QSqlDatabase 所用(详
细信息请参考 QSqlDatabase::drivers())。
连接数据库
如果要使用 QSqlQuery 或 QSqlCursor 类,则少要连接并打开一个数据库连接。
如果应用程序只需要一个数据库连接,QSqlDatabase 类可以创建一个为所有 SQL
操作所利用的默认连接,如果需要多个数据库连接,每个连接也可以容易地建立。
QSqlDatabase 需要 qsqldatabase.h 这个头文件。
连接单一数据库
创建一个数据库连接需要三个操作:激活驱动程序、设置连接信息、打开连接。
#include <qapplication.h>
#include <qsqldatabase.h>
#include "../login.h"
int main( int argc, char *argv[] )
{
QApplication app( argc, argv );
QSqlDatabase *defaultDB =
QSqlDatabase::addDatabase( DB_SALES_DRIVER );
if ( defaultDB ) {
defaultDB->setDatabaseName( DB_SALES_DBNAME );
defaultDB->setUserName( DB_SALES_USER );
defaultDB->setPassword( DB_SALES_PASSWD );
defaultDB->setHostName( DB_SALES_HOST );
if ( defaultDB->open() ) {
// 数据库被成功打开,我们现在可以运行 SQL 命令。
}
}
return 0;
}
来自
sql/overview/connect1/main.cpp
在以上代码中我们先通过 QSqlDatabase::addDatabase()激活了一个数据库驱动程
序,传入了驱动程序名。现在可利用的驱动程序为:QODBC3(开放数据库连接)、
QOCI8(Oracle 8和 9)、QTDS7(Sybase Adaptive Server 和 Microsoft SQL Server)、
QPSQL7(PostgreSQL 6 和 7)和 QMYSQL3(MySQL)。请注意部分驱动程序
并未包括在 Qt 的自由版中,详细情款请查看 README 文件。
连接创建后就成为应用程序的默认数据库连接并可为 Qt 的 SQL 类所使用。
其次我们调用了 setDatabaseName()、setUserName()、setPassword()和 setHostName()
来初使化连接信息。对于 QOCI8(Oracle 8 和 9),TNS 服务名称必须由
setDatbaseName()传递。当连接 ODBC 数据源时,数据源名称(DSN)必须在
setDatabaseName()调用中使用。
最后我们调用了 open()来打开数据库以存取数据,如果该步失败将返回假,用户
可通过 QSqlDatabase::lastError()来查明错误信息。
连接多个数据库
连接至多个数据库需要在使用 QSqlDatabase::addDatabase()传入两个参数,其中
第二个参数用来指明这个连接的唯一标识符。
#include <qapplication.h>
#include <qsqldatabase.h>
#include "../login.h"
bool createConnections();
int main( int argc, char *argv[] )
{
QApplication app( argc, argv );
if ( createConnections() ) {
// 数据库被成功打开,得到它们的指针:
QSqlDatabase *oracledb =
QSqlDatabase::database( "ORACLE" );
// 现在我们可以在 oracle 连接或默认连接上执行 SQL 命令
}
return 0;
}
bool createConnections()
{
// 创建默认数据库连接
QSqlDatabase *defaultDB =
QSqlDatabase::addDatabase( DB_SALES_DRIVER );
if ( ! defaultDB ) {
qWarning( "Failed to connect to driver" );
return FALSE;
}
defaultDB->setDatabaseName( DB_SALES_DBNAME );
defaultDB->setUserName( DB_SALES_USER );
defaultDB->setPassword( DB_SALES_PASSWD );
defaultDB->setHostName( DB_SALES_HOST );
if ( ! defaultDB->open() ) {
qWarning( "Failed to open sales database: " +
defaultDB->lastError().driverText() );
qWarning( defaultDB->lastError().databaseText() );
return FALSE;
}
// 创建一个名为 oracle 的连接
QSqlDatabase *oracle =
QSqlDatabase::addDatabase( DB_ORDERS_DRIVER, "ORACLE" );
if ( ! oracle ) {
qWarning( "Failed to connect to oracle driver" );
return FALSE;
}
oracle->setDatabaseName( DB_ORDERS_DBNAME );
oracle->setUserName( DB_ORDERS_USER );
oracle->setPassword( DB_ORDERS_PASSWD );
oracle->setHostName( DB_ORDERS_HOST );
if ( ! oracle->open() ) {
qWarning( "Failed to open orders database: " +
oracle->lastError().driverText() );
qWarning( oracle->lastError().databaseText() );
剩余31页未读,继续阅读
jacket2007
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页