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

 

posted @ 2013-01-11 14:23  wiessharling  阅读(279)  评论(0编辑  收藏  举报