• Qt数据库



    QSqlDatabase db = QSqlDatabase::addDatabase(“QSQLITE”); //添加数据库驱动 db.setDatabaseName(“:memory:”); //数据库连接命名 if(!db.open()) //打开数据库 { return false; } QSqlQuery query; //以下执行相关QSL语句 query.exec(“select id,name from student where id >= 2″); //查找表中id >=2 的记录的id项和name项的值 while(query.next()) //query.next()指向查找到的第一条记录,然后每次后移一条记录 { int ele0 = query.value(0).toInt(); //query.value(0)是id的值,将其转换为int型 QString ele1 =query.value(1).toString(); qDebug() << ele0 <<ele1 ; //输出两个值 }

    2. 对查询结果集进行操作
       

    void Widget::on_pushButton_clicked() 
    {     
            QSqlQuery query;     
            query.exec(“select * from student”);    
            while(query.next())     
            {        
                     qDebug() << query.value(0).toInt() << query.value(1).toString();     
            } 
    }

      结果集其实就是查询到的所有记录的集合,而在QSqlQuery类中提供了多个函数来操作这个集合,需要注意这个集合中的记录是从0开始编号的。

      最常用的有:

      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():获得现在query指向的记录在结果集中的编号。

    3. 在SQL语句中使用变量

      我们先看下面的一个例子,将“查询”按钮的槽函数更改如下:

    void Widget::on_pushButton_clicked() 
    {     
            QSqlQuery query;     
            query.prepare(“insert into student (id, name) values (:id, :name)”);     
            query.bindValue(0, 5);   
            query.bindValue(1, “sixth”);    
            query.exec();     //下面输出最后一条记录     
         query.exec(“select * from student”);    
            query.last();     
            int id = query.value(0).toInt();     
            QString name = query.value(1).toString();    
            qDebug() << id << name;
     }

    三、批处理操作

    当要进行多条记录的操作时,我们就可以利用绑定进行批处理。看下面的例子。

    void Widget::on_pushButton_clicked() 
    {     
            QSqlQuery q;     
            q.prepare(“insert into student values (?, ?)”);     
            QVariantList ints;    
             ints << 10 << 11 << 12 << 13;    
             q.addBindValue(ints);    
             QVariantList names;     
            names << “xiaoming” << “xiaoliang” << “xiaogang” << QVariant        (QVariant::String);     //最后一个是空字符串,应与前面的格式相同    q.addBindValue(names);    
     if (!q.execBatch()) //进行批处理,如果出错就输出错误        
     qDebug() << q.lastError();     //下面输出整张表     
    QSqlQuery query;     
    query.exec(“select * from student”);    
     while(query.next())    
     {        
     int id = query.value(0).toInt();        
     QString name = query.value(1).toString();        
     qDebug() << id << name;    
     } 
    }

    四、事务操作
        

    void Widget::on_pushButton_clicked()
    {    
        if(QSqlDatabase::database().driver()->hasFeature(QSqlDriver::Transactions))    {     //先判断该数据库是否支持事务操作               QSqlQuery query;        
        if(QSqlDatabase::database().transaction()) //启动事务操作                {            ////下面执行各种数据库操作            
            query.exec(“insert into student values (14, ‘hello’)”);         
            query.exec(“delete from student where id = 1″);            //
            if(!QSqlDatabase::database().commit())            
            {                
                qDebug() << QSqlDatabase::database().lastError(); //提交                
                if(!QSqlDatabase::database().rollback())                    
    qDebug() << QSqlDatabase::database().lastError(); //回滚            
            }        
        }        
    //输出整张表        
            query.exec(“select * from student”);        
            while(query.next())            
                qDebug() << query.value(0).toInt() << query.value(1).toString();    
    }
    }
  • 相关阅读:
    CNN网络架构演进:从LeNet到DenseNet
    【OCR技术系列之四】基于深度学习的文字识别(3755个汉字)
    【OCR技术系列之三】大批量生成文字训练集
    【Keras】基于SegNet和U-Net的遥感图像语义分割
    Python各类图像库的图片读写方式总结
    我的2017:从工作再到学生
    VS2017 WinFrom打包设置与教程
    采用Opserver来监控你的ASP.NET项目系列(三、监控你的服务器状态)
    采用Opserver来监控你的ASP.NET项目系列(二、监控SQL Server与Asp.Net项目)
    采用Opserver来监控你的ASP.NET项目系列(一、Opserver监控的简介与平台搭建)
  • 原文地址:https://www.cnblogs.com/wiessharling/p/2856380.html
Copyright © 2020-2023  润新知