Oracle / QT / 文章

Oracle数据库与QOIC

本文介绍如何安装Oracle 19c数据库,如何生成QOIC驱动使得Qt可以连接到Oracle数据库。

Oracle数据库的下载与安装

1.访问Oracle官网下载数据库压缩包:

https://www.oracle.com/database/technologies/oracle-database-software-downloads.html

2.解压后安装:

双击setup进行安装,会比较慢,请耐心等待。

节点

3.安装过程中的配置

具体选项用红框标注:

第1步:

节点

第2步:

节点

第3步:

节点

第4步:

节点

第5步:

安装过程会修改很多注册表,执行安装之前请关闭杀毒软件。

安装过程较长,请耐心等待。

节点
节点

完成安装,可以登录 https://localhost:5500/em 查看数据库状态。

节点

查看Oracle应用及服务项:

节点

查看数据库服务:

节点

访问https://localhost:5500/em/
Username填写【sys】,密码填写安装时设置的【全局数据库口令】

节点

4.解锁scott用户
使用 sqlplus / as sysdba 登录数据库

使用 conn scott/tiger 连接scott用户

出现 the account is locked 说明账户被锁定或账户不存在

使用 sqlplus / as sysdba 重新登陆数据库

使用 alert user scott account unlock; 解锁scott用户

出现 user scott does not exist 说明用户不存在

使用 conn sys/密码 as sysdba 重新登陆数据库

在oracle数据库的安装目录中找到scott.sql文件路径:

使用 @E:\Oracle\rdbms\admin\scott.sql 执行scott.sql文件

这样scott用户就被添加进来,

如果想修改scott的默认密码可以执行下面命令(先以sys权限登录:sqlplus / as sysdba)

修改scott的登录密码

SQL> alter user scott identified by tiger;你再拿scott/tiger来登录就可以了:

节点

生成QOIC驱动

安装QT的过程略过,注意安装Qt的过程中把src选项勾上,默认是不选的

1.使用Qt打开安装目录下的项目 oci.pro ,每个人安装路径可能不一样,根据自己的情况更改,以我的安装目录演示:

D:\Qt\Qt5.13.1\5.13.1\Src\qtbase\src\plugins\sqldrivers\oci

载入项目后直接运行,会报如下错误:

节点

解决办法:

打开oci.pro文件

①将 QMAKE_USE += oci 替换成 QMAKE_LFLAGS +=E:\Oracle\bin\oci.dll

②在末尾添加
INCLUDEPATH += E:\Oracle\oci\include
LIBPATH += E:\Oracle\oci\lib\msvc

③E:\Oracle\是Oracle数据库的安装目录

节点

改好之后重新构建oci项目,不会报错,有警告可以忽略。

在根目录D:\plugins\sqldrivers找到以下四个文件,注:也可能在C盘的根目录下。

将qsqloci.dlll(release版本)和qsqlocid.dll(debug版本)复制到Qt的安装目录(D:\Qt\Qt5.13.1\5.13.1\mingw73_64\plugins\sqldrivers),复制到哪个编译器需要自己选择,我是用QT的mingw_64编译器,所以把这两个文件复制到QT的mingw_64编译器的文件中,有些同学需要在msvc编译器下运行程序,则将这两个文件复制到该编译器文件中即可。

节点
节点

编写Qt代码连接oracle数据库

新建一个QT窗口程序,

在pro文件中添加QT += sql,

在mainwindow.cpp文件中输入以下代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QtSql>
#include<QSqlDriver>
#include<QSqlDatabase>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
        db.setHostName("localhost");             //数据库服务器ip
        db.setPort(1521);                        //数据库端口号
        db.setDatabaseName("orcl");              //数据库名称
        db.setUserName("scott");                  //数据库用户名
        db.setPassword("tiger");                //数据库密码

        /*若输出列表中出现QOCI8和QOCI,则表示驱动加载成功*/
        QStringList drivers = QSqlDatabase::drivers();
        foreach(QString driver, drivers)
        qDebug() <<"\t" << driver;

        if(!db.open())
        {
            qDebug()<<"open failed";
            qDebug()<<db.lastError();
            return;
        }
        else
        {
            qDebug()<<"open succeeded";
            qDebug()<<db.driverName();
        }
}

MainWindow::~MainWindow()
{
    delete ui;
}

命令行输出以下语句说明驱动程序安装成功:

节点
0 0 vote
Article Rating
Subscribe
提醒
0 评论
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x