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数据库相关推荐

  1. alin的学习之路:Qt与多线程

    alin的学习之路:Qt与多线程 如果程序在进行复杂的逻辑处理过程中, 对窗口进行操作, 就会出现无响应的情况. 如何解决这样的问题与高并发的问题? 需要使用多线程. 方式1 特点:简单 创建一个自定 ...

  2. alin的学习之路:共享内存

    alin的学习之路:共享内存 1. 概念 共享内存是进程间通信中效率最高的一种方式. 共享内存: 可以被多个进程同时使用的一块内核的内存 有血缘关系的进程 没有血缘关系的进程 这块内存不属于任何的进程 ...

  3. alin的学习之路:序列化与protobuf

    alin的学习之路:序列化与protobuf 1. 序列化(串行化) 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程,与之相对应的过程称之为反序列化(Unser ...

  4. alin的学习之路(Linux网络编程:十)(http协议,BS模型)

    alin的学习之路(Linux网络编程:十)(http协议,BS模型) 需求:使用B/S模型来访问主机中的文件(包括目录) 0. B/S 模型 注意事项 1. 浏览器请求ico ​ 准备一个favic ...

  5. alin的学习之路:面试题 计算机网络相关

    alin的学习之路:面试题 计算机网络相关 介绍下proactor和reactor reactor:同步IO proactor:异步IO Reactor框架中用户定义的操作是在实际操作之前调用的.比如 ...

  6. alin的学习之路:面试题 数据库相关

    alin的学习之路:面试题 数据库相关 如何提高查询速度? 使用索引 create index 索引名 on 表名(列名1,列名2,--); 数据库索引,事务,事务级别 使用索引可以提高查询效率 事务 ...

  7. alin的学习之路(数据库篇:二)(select查询,where条件查询,order by排序,单行函数,多行函数,group by分组)

    alin的学习之路(数据库篇:二)(select查询,where条件查询,order by排序,单行函数,多行函数,group by分组) 1. SQL语句 1.1 sql语言类型 sql是一门独立的 ...

  8. alin的学习之路:加密相关知识(加密和解密,常见加密算法,消息验证码HMAC,数字签名)

    alin的学习之路:加密相关知识(加密和解密,常见加密算法,消息验证码HMAC,数字签名) 1. 加密和解密 1.1 加密的三要素 原始数据 加密操作: 明文 -> 密文 解密操作: 密文 -& ...

  9. alin的学习之路(数据库篇:三)(多表查询,子查询,集合运算,数据处理)

    alin的学习之路(数据库篇:三)(多表查询,子查询,集合运算,数据处理) 1. 多表查询 1.1 笛卡儿积 笛卡尔积就是两个集合的乘积计算 . 如果多个表进行联合查询, 得到结果是一个笛卡尔积, 举 ...

最新文章

  1. obj + mtl 格式说明
  2. Codeforces 1344 题解
  3. Arduino学习笔记07
  4. 网站安全之ASP程序加密解密方法全面解析
  5. 本地方法(JNI)——数值参数与返回值
  6. 做人力资源需要掌握python_9种人力资源分析工具,高效打造数字化HR全流程
  7. 王爽 汇编语言第三版 第8章( 寻址方式 ) --- 数据处理的两个问题
  8. 第三周课程总结实验报告一
  9. 利用junit对springMVC的Controller进行测试
  10. [hadoop读书笔记] 第五章 MapReduce工作机制
  11. python直接取系统的时间_用Python在Linux中获得系统正常运行时间的最快方法
  12. 说不尽的洒脱:不义而富且贵,于我如浮云
  13. 颜色 透明度 算法_通过问责制和透明度减少算法偏差
  14. python excel对比_Python处理Excel模块的对比分析
  15. 一图看懂什么是集成电路?
  16. 最新主流 Markdown 编辑器推荐
  17. matlab改进平方根算法,改进平方根请教
  18. 全球高效能人士给青年的50个忠告(上) --转载
  19. 今日份PS练习|玻璃材质背景练习
  20. 迅雷方舟与花瓣:不一样的“瀑布流”

热门文章

  1. 更轻量级的可视化引擎库
  2. 【ROS】—— ROS通信机制——参数服务器(四)
  3. 数据批量从nii格式转成npz格式
  4. h5与IOS webview的爱恨情仇 —ios端图片拉伸bug
  5. 初学Java心得体会
  6. 伪类和伪元素区别有哪些?
  7. 溜了溜了,建了个人博客
  8. pycharm没有找到manage repositories按钮
  9. 22年电赛冬令营授课
  10. class和getClass()的区别