QT SQLITE使用事务批量插入数据

前端之家收集整理的这篇文章主要介绍了QT SQLITE使用事务批量插入数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

连接数据库、建表结构

    QsqlDatabase dbT1 = QsqlDatabase::addDatabase("QsqlITE");	//连接数据库
    dbT1.setDatabaseName("t1data");	                        //设置数据库名称
    dbT1.open(); 						//打开数据库
    //建表
    datQry.exec("create table datatable (tIndex int primary key, "
                "tTimStamp int, "
                "tDistance varchar(20))");


方法一,批处理方式:


 dbT1.transaction();	 	//开始启动事务
 
   inQry.prepare("insert into datatable values (?,?,?)");
   while(!ReadDat.atEnd())
   {
       strTextData = ReadDat.readLine();
       listIndex << datIndex;
       tmStamp << tmStampCnt;
       dtData << strTextData;
       datIndex++;
       DatWin->append(strTextData);
   }
   //绑定数据,顺序应与表结构字段数据一致
   inQry.addBindValue(listIndex);	//绑定数据
   inQry.addBindValue(tmStamp);		//绑定数据
   inQry.addBindValue(dtData);		//绑定数据
 
   inQry.execBatch();		//进行批处理操作
 
   dbT1.commit();		//提交事务,此时打开数据库文件执行sql语句
 
   //不加下面三句,重复操作上面语句时,数据库不会有新的添加
   //因为作为主键的listIndex内有原数据,此时数据库不会保存主键值重复的内容
   listIndex.clear();
   tmStamp.clear();
   dtData.clear();


方法二,占位符方式:


   dbT1.transaction();
   while(!ReadDat.atEnd())
   {
       strTextData = ReadDat.readLine();
       inQry.prepare("insert into datatable(tIndex,tTimStamp,tDistance)"
                         "values(:tIndex,:tTimStamp,:tDistance)");
        inQry.bindValue(0,datIndex);
        inQry.bindValue(1,tmStampCnt);
        inQry.bindValue(2,strTextData);
        inQry.exec();
        datIndex++;
        DatWin->append(strTextData);
   }
   dbT1.commit();
原文链接:https://www.f2er.com/sqlite/198450.html

猜你在找的Sqlite相关文章