配色: 字号:
QT在vs环境下操作数据库由www.ylyp.net提供
2012-06-28 | 阅:  转:  |  分享 
  
Qt连接数据库

1:连接sqlite

m_dstDB=QSqlDatabase::addDatabase("QSQLITE","tempsql");

//tempmsql为了不取默认连接,QSqlQuery进行操作

m_Serverdb.setDatabaseName(dbpath);

设置数据库连接属性,其中dbpath可以是“123.db3”也可以包含路径例如:“d:/12/123.db3”

if(m_Serverdb.open())

{

QSqlQuerytablequery=QSqlQuery(m_Serverdb);

tablequery.exec("selectfromsqlite_masterWHEREsqlisnotnull");//查看sqlite中几个用户表

tablequery.last();

inttablecount=tablequery.at();//结果集中一共多少条数据

if(tablecount<1)

{

QStringstrStation="CREATETABLEt_station(idintPRIMARYKEY,nameVARCHAR(20),districtint);";

QSqlQueryqry_createDB=QSqlQuery(m_Serverdb);//一定要选定数据库

qry_createDB.exec(strStation);

qry_createDB.finish();

}

}

2:连接sqlserver

m_srcDB=QSqlDatabase::addDatabase("QODBC","tempms");//tempms为了不取默认连接,QStringstrDatabaseName=QString("DRIVER={SQLServer};Server=(%1);Database=%2").arg("local").

arg(m_srcCon.m_dbName);//sqlserver连接,local不要改变m_srcDB.setHostName(m_srcCon.m_host);//如果想连接远程数据的时候,输入ip地址

m_srcDB.setPort(m_srcCon.m_port);

m_srcDB.setDatabaseName(strDatabaseName);

m_srcDB.setUserName(m_srcCon.m_user);

m_srcDB.setPassword(m_srcCon.m_password);



if(m_srcDB.open()) //打开数据库

{

//m_srcQuery=newQSqlQuery(m_srcDB)

returntrue;

} QSqlQuerypro_query=QSqlQuery(m_srcDB);

boolflag=pro_query.exec("exec存储过程名称");

if(pro_query.first())//指向第一条数据

{



QSqlQueryquerytran=QSqlQuery(m_Serverdb);

querytran.exec("PRAGMAsynchronous=OFF;");//sqlite为小型关系数据库,插入大量数据的时候就要采用事务进行提交,否则耗时会很长。

querytran.exec("begin;");

do

{

comcount++;

QStringid=pro_query.value(0).toString();

QStringdesc=pro_query.value(1).toString();

QSqlQueryquery=QSqlQuery(m_Serverdb);

query.prepare("INSERTINTOA(id,desc)VALUES(:id,:desc)");

query.bindValue(":id",id);//在这定占位符上确定绑定的值

query.bindValue(":desc",desc);

query.exec();

}while(pro_query.next()&&bResultquery);

querytran.exec("commit;");

querytran.clear();

}





Qtsql操作总结:

#include





QSqlDatabase类实现了数据库连接的操作QSqlQuery类用来执行SQL语句QSqlRecord类封装数据库所有记录

intid=query.value(1).toInt();

seek(intn):query指向结果集的第n条记录。指定当前的位置

first():query指向结果集的第一条记录。

last():query指向结果集的最后一条记录。

next():query指向下一条记录,每执行一次该函数,便指向相邻的下一条记录。

previous():query指向上一条记录,每执行一次该函数,便指向相邻的上一条记录。

record():获得现在指向的记录。

value(intn):获得属性的值。其中n表示你查询的第n个属性,比方上面我们使用“selectfromstudent”就相当于“selectid,namefromstudent”,那么value(0)返回id属性的值,value(1)返回name属性的值。该函数返回QVariant类型的数据,关于该类型与其他类型的对应关系,可以在帮助中查看QVariant。at()//返回当前查询的位置

intfieldNo=query.record().indexOf(“name”);//返回"name"的列号
献花(0)
+1
(本文系adwtuteng首藏)