alin的学习之路:在Qt中使用Oracle数据库
alin的学习之路:在Qt中使用Oracle数据库
1. 准备工作
在Qt中安装好Source插件,将其中的oci模块进行编译,注意要在oci.pro中指定数据块的动态库和头文件路径
需要在Qt项目文件中添加的模块名:
qmake: QT += sql
2. 相关类和API
QSqlDatabase
// 通过这个类添加/删除/复制/关闭数据库实例 // 相关的api// 得到key使用的数据库驱动名字的集合 [static] QStringList QSqlDatabase::drivers(); // 函数输出: ("QSQLITE", "QMYSQL", "QMYSQL3", "QOCI", "QOCI8", "QODBC", "QODBC3", "QPSQL", "QPSQL7")// 这个类的构造函数一般不使用, 添加数据库实例需要使用这个类的静态函数 [static] QSqlDatabase QSqlDatabase::addDatabase(const QString &type, const QString &connectionName = QLatin1String( defaultConnection )); 参数:- type: 指定要连接什么样的数据库(mysql, oracle, 其他...)- 调用静态函数 QSqlDatabase::drivers();得到数据库驱动名- QMYSQL -> 连接mysql数据库- QOCI -> 连接oracle数据库- connectionName: 数据库连接名, 默认叫: defaultConnection- 通过这个名字就可以得到创建的数据库实例对象了 返回值: 得到数据实例对象// 通过数据库连接名得到数据库实例对象 [static] QSqlDatabase QSqlDatabase::database(const QString &connectionName = QLatin1String( defaultConnection ), bool open = true); 参数:- connectionName: 在 addDatabase()第二个参数指定的连接名- open: 实例的状态, true: 得到的实例设置为打开状态, false: 得到的实例设置为关闭状态// 判断连接名对应的连接是否已经存在了 [static] bool QSqlDatabase::contains(const QString &connectionName = QLatin1String( defaultConnection ));
// 通过QSqlDatabase数据库实例对象, 初始化连接信息 // 设置数据库名, oracle的数据库名: orcl void QSqlDatabase::setDatabaseName(const QString &name); // 数据库服务器对应的IP地址 // 如果是本地连接可以直接写 localhost, 127.0.0.1 void QSqlDatabase::setHostName(const QString &host); // 数据库服务器绑定的端口, 如果数据库使用的就是默认端口, 这个函数可以不调用 void QSqlDatabase::setPort(int port); // 连接的数据库中某个用户的用户名 void QSqlDatabase::setUserName(const QString &name); // 连接的数据库中某个用户对应的密码 void QSqlDatabase::setPassword(const QString &password);// 通过初始化的连接信息, 连接数据库 bool QSqlDatabase::open(); 返回值: - 成功: true- 失败: false// 关闭数据库连接 void QSqlDatabase::close();// 判断数据库是否打开了 bool QSqlDatabase::isOpen() const;
// 事务操作 // 事务是一个操作的集合, 有可能涉及多次数据的修改(数据添加, 数据修改, 数据删除) // 开启一个事务 bool QSqlDatabase::transaction(); // 提交事务 bool QSqlDatabase::commit(); // 数据回滚 bool QSqlDatabase::rollback();
数据查询类 -
QSqlQuery
// 构造函数 QSqlQuery::QSqlQuery(const QString &query = QString(), QSqlDatabase db = QSqlDatabase()) 参数:- query: 要执行的sql语句: 添删查改// 执行sql语句 // 执行成功: true, 执行失败: false bool QSqlQuery::exec(const QString &query); // 执行的sql语句是在构造函数中进行的初始化 bool QSqlQuery::exec();// 如果是查询光有成功/失败是不够的, 在成功之后, 需要得到查询的结果集, // 结果集存储在当前的 QSqlQuery对象中 // 遍历 QSqlQuery对象中的结果集 (多行多列), 每遍历一次得到一条记录(一行), 结果存储在 QSqlQuery 中 // 结果集中还有记录返回true, 结果集读完了返回false // 第一次调用next()函数, 得到结果集中的第一行 bool QSqlQuery::next(); // 循环遍历 while(query.next()) {// 得到一条记录(一行)// 取出当前行每一个字段的值query.value(x).toxxx(); }// 取出记录中的字段值(列值) // 通过字段的编号取出字段值, 从 0 开始, 数一下字段在结果集中的编号 QVariant QSqlQuery::value(int index) const; // 通过字段名直接取出字段值 QVariant QSqlQuery::value(const QString &name) const;
3. 实例程序
void test
{//打印所有的驱动//qDebug() << QSqlDatabase::drivers();//创建数据库对象,需要指定驱动QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");//添加用户名,密码,ip地址,端口号db.setDatabaseName("orcl");db.setUserName("scott");db.setPassword("tiger");db.setHostName("192.168.31.52");//端口号可以不用设置,代表默认1521//设置完信息需要打开db.open();QString sql;sql = QString("select * from dept");//启动一个事务,也就是一个保存点db.transaction();// 创建查询对象QSqlQuery query;//执行查询语句bool bl = query.exec(sql);if(!bl){db.rollback();qDebug() << "查询失败,原因:" << db.lastError().text();}while(query.next()){qDebug()<< query.value(0).toInt() << query.value(1).toString() << query.value(2).toString();}//关闭数据库db.close();
}
4. oracle 查询用户查询表
查看当前实例下的所有用户:select * from dba_users;
查看用户下的所有表:select table_name from user_tables;
alin的学习之路:在Qt中使用Oracle数据库相关推荐
- alin的学习之路:Qt与多线程
alin的学习之路:Qt与多线程 如果程序在进行复杂的逻辑处理过程中, 对窗口进行操作, 就会出现无响应的情况. 如何解决这样的问题与高并发的问题? 需要使用多线程. 方式1 特点:简单 创建一个自定 ...
- alin的学习之路:共享内存
alin的学习之路:共享内存 1. 概念 共享内存是进程间通信中效率最高的一种方式. 共享内存: 可以被多个进程同时使用的一块内核的内存 有血缘关系的进程 没有血缘关系的进程 这块内存不属于任何的进程 ...
- alin的学习之路:序列化与protobuf
alin的学习之路:序列化与protobuf 1. 序列化(串行化) 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程,与之相对应的过程称之为反序列化(Unser ...
- alin的学习之路(Linux网络编程:十)(http协议,BS模型)
alin的学习之路(Linux网络编程:十)(http协议,BS模型) 需求:使用B/S模型来访问主机中的文件(包括目录) 0. B/S 模型 注意事项 1. 浏览器请求ico 准备一个favic ...
- alin的学习之路:面试题 计算机网络相关
alin的学习之路:面试题 计算机网络相关 介绍下proactor和reactor reactor:同步IO proactor:异步IO Reactor框架中用户定义的操作是在实际操作之前调用的.比如 ...
- alin的学习之路:面试题 数据库相关
alin的学习之路:面试题 数据库相关 如何提高查询速度? 使用索引 create index 索引名 on 表名(列名1,列名2,--); 数据库索引,事务,事务级别 使用索引可以提高查询效率 事务 ...
- alin的学习之路(数据库篇:二)(select查询,where条件查询,order by排序,单行函数,多行函数,group by分组)
alin的学习之路(数据库篇:二)(select查询,where条件查询,order by排序,单行函数,多行函数,group by分组) 1. SQL语句 1.1 sql语言类型 sql是一门独立的 ...
- alin的学习之路:加密相关知识(加密和解密,常见加密算法,消息验证码HMAC,数字签名)
alin的学习之路:加密相关知识(加密和解密,常见加密算法,消息验证码HMAC,数字签名) 1. 加密和解密 1.1 加密的三要素 原始数据 加密操作: 明文 -> 密文 解密操作: 密文 -& ...
- alin的学习之路(数据库篇:三)(多表查询,子查询,集合运算,数据处理)
alin的学习之路(数据库篇:三)(多表查询,子查询,集合运算,数据处理) 1. 多表查询 1.1 笛卡儿积 笛卡尔积就是两个集合的乘积计算 . 如果多个表进行联合查询, 得到结果是一个笛卡尔积, 举 ...
最新文章
- obj + mtl 格式说明
- Codeforces 1344 题解
- Arduino学习笔记07
- 网站安全之ASP程序加密解密方法全面解析
- 本地方法(JNI)——数值参数与返回值
- 做人力资源需要掌握python_9种人力资源分析工具,高效打造数字化HR全流程
- 王爽 汇编语言第三版 第8章( 寻址方式 ) --- 数据处理的两个问题
- 第三周课程总结实验报告一
- 利用junit对springMVC的Controller进行测试
- [hadoop读书笔记] 第五章 MapReduce工作机制
- python直接取系统的时间_用Python在Linux中获得系统正常运行时间的最快方法
- 说不尽的洒脱:不义而富且贵,于我如浮云
- 颜色 透明度 算法_通过问责制和透明度减少算法偏差
- python excel对比_Python处理Excel模块的对比分析
- 一图看懂什么是集成电路?
- 最新主流 Markdown 编辑器推荐
- matlab改进平方根算法,改进平方根请教
- 全球高效能人士给青年的50个忠告(上) --转载
- 今日份PS练习|玻璃材质背景练习
- 迅雷方舟与花瓣:不一样的“瀑布流”