加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-12 19:22:36 所属栏目:百科 来源:网络整理
导读:连接数据库、建表结构 QsqlDatabase dbT1 = QSqlDatabase ::addDatabase( "QSQLITE" ); //连接数据库 dbT1.setDatabaseName( "t1data" ); //设置数据库名称 dbT1.open(); //打开数据库 //建表 datQry.exec( "create table datatable (tIndex int primary key

连接数据库、建表结构

    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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读