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查询的结果,进一步还可以在结果中加入转换加密等功能。