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