资源描述
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())
{
QSqlQuery tablequery=QSqlQuery(m_Serverdb);
tablequery.exec("select * from sqlite_master WHERE sql is not null");//查看sqlite中几个用户表
tablequery.last();
int tablecount=tablequery.at(); //结果集中一共多少条数据
if (tablecount<1)
{
QString strStation=" CREATE TABLE t_station(id int PRIMARY KEY, name VARCHAR(20), district int );";
QSqlQuery qry_createDB=QSqlQuery(m_Serverdb); //一定要选定数据库
qry_createDB.exec(strStation);
qry_createDB.finish();
}
}
2:连接sqlserver
m_srcDB=QSqlDatabase::addDatabase("QODBC","tempms");//tempms为了不取默认连接,采用odbc连接
QString strDatabaseName = 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); //端口默认为1433
m_srcDB.setDatabaseName(strDatabaseName);
m_srcDB.setUserName(m_srcCon.m_user);
m_srcDB.setPassword(m_srcCon.m_password);
if ( m_srcDB.open()) //打开数据库
{
//m_srcQuery=new QSqlQuery(m_srcDB)
return true;
}
调用储存过程例子:
QSqlQuery pro_query=QSqlQuery(m_srcDB);
bool flag=pro_query.exec("exec 存储过程名称");
if (pro_query.first()) //指向第一条数据
{
QSqlQuery querytran=QSqlQuery(m_Serverdb);
querytran.exec("PRAGMA synchronous = OFF;"); //sqlite为小型关系数据库,插入大量数据的时候就要采用事务进行提交,否则耗时会很长。
querytran.exec("begin;");
do
{
comcount++;
QString id=pro_query.value(0).toString();
QString desc=pro_query.value(1).toString();
QSqlQuery query=QSqlQuery(m_Serverdb);
query.prepare("INSERT INTO A (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();
}
Qt sql 操作总结:
#include <QtSql>
QSqlDatabase类实现了数据库连接的操作
QSqlQuery类用来执行SQL语句
QSqlRecord类 封装数据库所有记录
int id = query.value(1).toInt();
seek(int n) :query指向结果集的第n条记录。指定当前的位置
first() :query指向结果集的第一条记录。
last() :query指向结果集的最后一条记录。
next() :query指向下一条记录,每执行一次该函数,便指向相邻的下一条记录。
previous() :query指向上一条记录,每执行一次该函数,便指向相邻的上一条记录。
record() :获得现在指向的记录。
value(int n) :获得属性的值。其中n表示你查询的第n个属性,比方上面我们使用“select * from student”就相当于“select id, name from student”,那么value(0)返回id属性的值,value(1)返回name属性的值。该函数返回QVariant类型的数据,关于该类型与其他类型的对应关系,可以在帮助中查看QVariant。
at()//返回当前查询的位置
int fieldNo = query.record().indexOf(“name”);//返回"name"的列号
展开阅读全文