【QT下SQL记录集保存方法】

1 篇文章 0 订阅

QT下SQL记录集保存方法


前言

QT 下 对数据库记录查询后的传递


在QT中,查询了某个SQL语句后的记录集,我没找到可以直接传递记录集的方法,为此自己编写了一个传递函数

一、QT 使用 sql的常用取记录的方法?

QVariantList aVar;
int aInt;
QSqlQuery query(*pDatabase);
aInt = query.exec(aSql);
if(query.size()>0)
{
    QSqlRecord aRec;
    aRec = query.record();


}
  while (query.next())
  {

//      aVar <<  query.record() << QVariant();;
  }

二、取记录集的函数

1、创建一个通用的取记录集的函数

代码如下(示例):

// aNeedData=0 不需要返回查询的结果,只需要字段集,非0 则记录0中包含的是字段名,其余记录为记录集 aRes是用来返回是否成功打开数据集,成功为空,否则返回错误原因
QVariantList getRecordByCondition(QSqlDatabase *pDatabase, QString aSql, int aNeedData,  QString *aRes)
{

    QVariantList sqlRecordData;
    QSqlRecord record;
    QSqlField aField;
    QSqlQuery query(*pDatabase);
    int recordNums;
    *aRes = "";
    if(pDatabase->open())
    {

        //保存查询出来的记录集
        if(query.exec(aSql))
        {
            //recordNums = query.size();
            //sqlRecordData << recordNums;
            record=query.record();
            //aField = record.field(1);
            int cols=record.count();
            QStringList tmpFieldNameData;
            for(int i=0; i<cols; i++)
            {
                tmpFieldNameData << query.record().fieldName(i);
                qDebug()<<query.record().fieldName(i);
            }
            sqlRecordData << tmpFieldNameData;

            while (query.next() && aNeedData!=0)
            {
                QHash<QString, QVariant> tmpRecordData;
                for(int i=0;i<cols;i++)
                {
                    //qDebug() << query.value(i); // ??????? ????
                    //QVariant v = QVariant::fromValue<QList<int>>(list);
                    //qDebug() << v.type() << "|" << v.typeName() << "|" << v.userType() << "|" << QVariant::typeToName(v.type());
                    tmpRecordData.insert(query.record().fieldName(i), query.value(i));
                    qDebug() <<query.value(i).toByteArray().size();
                }
                sqlRecordData << tmpRecordData;
            }

            //return 1;
        }
        else
        {

          qDebug() <<  "problem!" << pDatabase->lastError();
          *aRes = pDatabase->lastError().text();
            //return -1;
        }
    }
    else
    {

        qDebug() <<  "db can not open because:" << pDatabase->lastError().text();
        *aRes = pDatabase->lastError().text();
        //return -2;
    }

    return sqlRecordData;
}```

## 2、使用的示例

<font color=#999AAA >
```c
void testGetRecord1()
{
    QVariantList atmpList;
    QVariant aVar, aRecVar;
    QStringList tmpFieldNameData;
    QString aSql, atmpStr, aRes;
    int aValSize;
    aSql = "select * from gis_SysCfg_View ";
    atmpList = getRecordByCondition(&rhDb, aSql, true, &aRes);
    if(aRes == "")
    {
        aValSize = atmpList.size();
                qDebug()<<"varSize="<< aValSize;
          if(aValSize > 0)
          {
             aVar = atmpList.at(0);
              tmpFieldNameData = aVar.toStringList();
          }
              aVar = atmpList.at(1);
              QHash<QString, QVariant> tmpRecordData;
              tmpRecordData = aVar.toHash();
              QByteArray byteArr = tmpRecordData[tmpFieldNameData.at(0)].toByteArray();
              byteAryToFile(byteArr,"main.jpg");
              qDebug()<<"var1="<<tmpRecordData[tmpFieldNameData.at(1)].toString();
              byteArr = tmpRecordData[tmpFieldNameData.at(2)].toByteArray();
              byteAryToFile(byteArr,"main.css");
              byteArr = tmpRecordData[tmpFieldNameData.at(3)].toByteArray();
              byteAryToFile(byteArr,"client.jpg");
              qDebug()<<"var2="<<tmpRecordData[tmpFieldNameData.at(4)].toString();
              byteArr = tmpRecordData[tmpFieldNameData.at(5)].toByteArray();
              byteAryToFile(byteArr,"client.css");

             qDebug()<<"var3="<<tmpRecordData[tmpFieldNameData.at(2)].toString();
              qDebug()<<"var4="<<tmpRecordData[tmpFieldNameData.at(3)].toString();

    }

}

总结

通过定义一个通用函数,可以比较方便的传递SQL查询的结果,进一步还可以在结果中加入转换加密等功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值