本文介绍如何安装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;
}
命令行输出以下语句说明驱动程序安装成功: