三、批量插入到数据库中
QSqlQuery query; query.prepare(“insert into student values (?, ?)”); QVariantList names; names << "小王" << "小明" << "小张" << "小新"; // 如果要提交空串,用QVariant(QVariant::String)代替名字 query.addBindValue(names); QVariantList ages; ages << 11 << 13 << 12 << 11; query.addBindValue(ages); if (!q.execBatch()) //进行批处理,如果出错就输出错误 qDebug() << q.lastError(); |
查询数据库操作
QSqlQuery query; query.exec("SELECT * FROM t_STUDENT"); // 查询的结果可能不止一条记录,所以我们称之为结果集 while (query.next()) { QString name = query.value(0).toString(); //取第i条记录第1个字段(从0开始计数)的结果 int age = query.value(0).toInt(); //取第i条记录第2个字段的结果 // ... 处理name,age变量数据 } |
seek(int n) :query指向结果集的第n条记录。指定当前的位置
first() :query指向结果集的第一条记录。
last() :query指向结果集的最后一条记录。
next() :query指向下一条记录,每执行一次该函数,便指向相邻的下一条记录。
previous() :query指向上一条记录,每执行一次该函数,便指向相邻的上一条记录。
record() :获得现在指向的记录。
value(int n) :获得属性的值。其中n表示你查询的第n个属性
int rowNum = query.at(); //获取query所指向的记录在结果集中的编号
int fieldNo = query.record().indexOf(“name”); //返回"name"的列号
int columnNum = query.record().count(); //获取每条记录中属性(即列)的个数
事务操作
操作函数:transaction(),commit()提交,rollback()回滚
if (QSqlDatabase::database().driver()->hasFeature(QSqlDriver::Transactions)){ ... } // |
操作事务前,先判断该数据库是否支持事务操作。hasFeature是QSQLDriver类函数
插入一条记录,然后提交事务
QSqlDatabase::database().transaction(); QSqlQuery query; query.exec("SELECT id FROM T_STUDENT WHERE class=1"); if (query.next()) { query.exec("INSERT INTO T_STUDENT (id,name,age) VALUES (3,'小李',13)"); } QSqlDatabase::database().commit(); |