Qt5.14.2 + Oracle11g 脱平台运行库含测试demo(免装ORACLE客户端)

站内下载地址:https://download.csdn.net/download/caoyin1234/15500053

一、运行库(SDK)说明:

1.本运行库(SDK)是基于Qt5.14.2(QT安装目录显示为5.14.2,但About QT Creator显示:Based on Qt 5.14.1)+Oracle11G32位OCI(选择32位是因为兼容64位——最初出发点;但大量测试和查询文档后表明,其QT链接Oracle混编生成QOCI时压根不支持64位混编)环境编译所得Release版本,理论支持Windows xp及以上产品。

2.本编译生产的脱平台SDK,支持生产环境无需再次安装Oracle客户端及一切产品——可通过配置本地化ini(db.ini)文件、或代码中实现目标数据库链路。

3.本运行库(SDK)内的文件除testOracle测试demo外,其他文件及文件夹无法再做精简、移动或更改(已经做到了最优)。

4.客户机运行时,无需安装ORACLE客户端,但需添加环境变量path。如将testOracle文件夹放在C盘根目录时,则需添加相应环境变量:;C:\testOracle\sqldrivers

5.已测试运行环境:

win10 64位、win7(x64、x32)

二、运行库(SDK)Demo运行效果说明:

1.db.ini必须存在。运行testOracle.exe后生产log.txt。打开log文件查看数据库运行情况:

对log.txt进行讲解,以下按行说明:

1.说明找到QOCI驱动(如果没有出现,看自己的环境变量是否已正确设置)

2.出现QOCI驱动加载成功,说明数据库驱动已加载

3.开始加载数据库初始化文件(如果未出现,查看数据库链接文件db.ini是否已存在)

4.此为数据库链路解析出的目标数据库连接

5.ORA-12541,这步不用说了吧,你没有连接上这个数据库(如果想完整测试,请创建相应数据库即可)

6.整个数据库驱动测试已完成。

 

三、运行库(SDK)demo扩展

本demo已经支持了oracle数据库的常用操作,如:增、删、改、查及事务提交和回滚,如需要继续查看效果,在自己的数据库中创建USERLIST表即可,建库脚本如下:

create table USERLIST
(
  USERID    VARCHAR2(10) not null,
  USERNAME  VARCHAR2(20) not null,
  PASSWORD  VARCHAR2(32),
  STATE     VARCHAR2(1) default (0) not null
)

四、其他说明

1.本运行库(SDK)已全程记录响应调试日志log.txt

2.脱平台的SDK为编程提供了大大便利,你无需再次编译QOCI或安装Oracle,更无需考虑QT如何在客户机脱平台、打包、精简。

3.原生态封装,用户可以网上翻阅到大量QT-Oracle链接资料,根据资料链接即可。

 

附上部分数据库操作代码段:

bool MainWindow::createConnection(QString dbHost,int dbPort,QString dbName,QString userName,QString userPassword)
{
    db = QSqlDatabase::addDatabase("QOCI");//QOCI
    db.setPort(dbPort);
    db.setHostName(dbHost);
    db.setDatabaseName(dbName);
    db.setUserName(userName);
    db.setPassword(userPassword);

    if (!db.open()) {
        m_bIsConn=false;
        qDebug() << db.lastError();
        return false;
    }
    else{
        m_bIsConn=true;
        qDebug() << "数据库已链接";
        //QMessageBox::critical(0,"congratulation!","oracle database connnect successfuly!!!",QMessageBox::Ok);
        return true;
    }
}
bool MainWindow::sqlQuery()
{
    if(m_bIsConn)
    {
        QSqlQuery query;
        bool bSuccess = query.exec("select * from userlist where userid='100002'");
        if(bSuccess)
        {
            QSqlRecord rec = query.record();
            qDebug()<<tr("TableName的字段个数:")<<rec.count();
            QSqlField filed = rec.field(0);
            qDebug()<<tr("字段名称:")<<rec.field(0).name()<<tr("字段类型:")<<rec.field(0).type()<<tr("字段值:")<<rec.field(0).value()
            <<tr("字段名称:")<<rec.field(1).name()<<tr("字段类型:")<<rec.field(1).type()<<tr("字段值:")<<rec.field(1).value()
            <<tr("字段名称:")<<rec.field(2).name()<<tr("字段类型:")<<rec.field(2).type()<<tr("字段值:")<<rec.field(2).value()
            <<tr("字段名称:")<<rec.field(3).name()<<tr("字段类型:")<<rec.field(3).type()<<tr("字段值:")<<rec.field(3).value();

            // 遍历结果集
            while(query.next())
            {
                // 将当前记录的字段值取出
                qDebug() << "用户编号: " << query.value("userid").toInt()
                    << ", 用户名称: " << query.value("username").toString()
                    << ", 用户密码: " << query.value("password").toString()
                    << ", 用户状态: " << query.value("state").toString();
            }

            return true;
        }
        else
        {
            qDebug() << query.lastError();
            return false;
        }
    }
    return false;
}

bool MainWindow::sqlInsert()
{
    bool bl=false;
    long rsCount=0;
    if(m_bIsConn)
    {
        // 对数据操作使用sql语句
        // 创建一个操作sql语句的类
        QSqlQuery query;
        QString sql = "select 1 from userlist where userid='100002'";

        bl = query.exec(sql);
        if(bl == false)
        {
            qDebug() << query.lastError();
            return false;
        }

        //----------获取结果集大小----------//
        if (query.last())
        {
            rsCount=query.at() + 1;
            qDebug()<<"已存在记录,无法插入。当前结果集大小="<<rsCount;
        }
        //这两哥们集体失效??查资料和不同版本有很大关系,毛病还一大堆,果断代替!!!!
        /*  int a1=query.numRowsAffected();
                int a2=query.size();
            */
        if(rsCount<=0)
        {
            // 开启一个事务
            db.transaction();
            sql = "insert into userlist(userid,username,password) values('100002', 'Joker', '666666')";
            bl = query.exec(sql);
            if(bl)
            {
                // 提交数据
                qDebug() << "Insert事务提交成功";
                db.commit();
                return true;
            }
            else
            {
                // 数据回滚
                db.rollback();
                qDebug() << query.lastError();
                return false;
            }
        }
    }
    return false;
}

bool MainWindow::sqlUpdata()
{
    bool bl=false;
    long rsCount=0;
    if(m_bIsConn)
    {
        // 创建一个操作sql语句的类
        QSqlQuery query;
        QString sql = "select 1 from userlist where userid='100002'";

        bl = query.exec(sql);
        if(bl == false)
        {
            qDebug() << query.lastError();
            return false;
        }

        //----------获取结果集大小----------//
        if (query.last())
        {
            rsCount=query.at() + 1;
            qDebug()<<"已存在记录集大小="<<rsCount;
        }

        if(rsCount == 1)
        {
            // 开启一个事务
            db.transaction();
            sql = "update userlist set username='join666',password='88888' where userid='100002'";
            bl = query.exec(sql);
            if(bl)
            {
                // 提交数据
                qDebug() << "UpData事务提交成功";
                db.commit();
                return true;
            }
            else
            {
                // 数据回滚
                db.rollback();
                qDebug() << query.lastError();
                return false;
            }
        }
    }
    return false;
}

bool MainWindow::sqlDel()
{
    bool bl=false;
    long rsCount=0;
    if(m_bIsConn)
    {
        // 创建一个操作sql语句的类
        QSqlQuery query;
        QString sql = "select 1 from userlist where userid='100002'";

        bl = query.exec(sql);
        if(bl == false)
        {
            qDebug() << query.lastError();
            return false;
        }

        //----------获取结果集大小----------//
        if (query.last())
        {
            rsCount=query.at() + 1;
            qDebug()<<"已存在记录,当前结果集大小="<<rsCount;
        }

        if(rsCount >= 1)
        {
            // 开启一个事务
            db.transaction();
            sql = "delete from userlist where userid='100002'";
            bl = query.exec(sql);
            if(bl)
            {
                // 提交数据
                qDebug() << "Delete事务提交成功";
                db.commit();
                return true;
            }
            else
            {
                // 数据回滚
                db.rollback();
                qDebug() << query.lastError();
                return false;
            }
        }
    }
    return false;
}

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caoyin1234

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值