1、Qt 连接数据库 1:连接sqlite m_dstDB = QSqlDatabase::addDatabase("QSQLITE","tempsql"); //tempmsql为了不取默认连接,若果只是用一个数据库的时候可以省略,但是如果是两个数据库中数据库中的数据相互调用时,显得就重要了,比如从一个数据库中取数据插入另外一个数据库中 操作数据库:利用QSqlQuery 进行操作 m_Serverdb.setDatabaseName(dbpath); 设置数据库连接属性,其中dbpath 可以是“123.db3”也可以包含路径例如:“d:/12/123.db3” if (m_Se
2、rverdb.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
3、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 s
4、trDatabaseName = 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.se
5、tUserName(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()) //指
6、向第一条数据 { 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)
7、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); //指向下一条数据 quer
8、ytran.exec("commit;");
querytran.clear();
}
Qt sql 操作总结:
#include
9、 :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"的列号






