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"的列号 |
|