Qt数据库 利用QSqlQuery类执行SQL语句 下篇是本节需要介绍的内容,接着上一篇教程。Qt数据库 利用QSqlQuery类执行SQL语句 上篇 ,也不多说了,直接看内容。
在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;
- }
运行效果如下:
可以看到,在student表的最后又添加了一条记录。在上面的程序中,我们先使用了prepare()函数,在其中利用了“:id”和“:name”来代替具体的数据,而后又利用bindValue()函数给id和name两个属性赋值,这称为绑定操作。其中编号0和1分别代表“:id”和“:name”,就是说按照prepare()函数中出现的属性从左到右编号,最左边是0 。这里的“:id”和“:name”,叫做占位符,这是ODBC数据库的表示方法,还有一种Oracle的表示方法就是全部用“?”号。如下:
- query.prepare(“insert into student (id, name) ”
- “values (?, ?)”);
- query.bindValue(0, 5);
- query.bindValue(1, “sixth”);
- query.exec();
我们也可以利用addBindValue()函数,这样就可以省去编号,它是按顺序给属性赋值的,如下:
- query.prepare(“insert into student (id, name) ”
- “values (?, ?)”);
- query.addBindValue(5);
- query.addBindValue(“sixth”);
- query.exec();
当用ODBC的表示方法时,我们也可以将编号用实际的占位符代替,如下:
- query.prepare(“insert into student (id, name) ”
- “values (:id, :name)”);
- query.bindValue(“:id”, 5);
- query.bindValue(“:name”, “sixth”);
- query.exec();
以上各种形式的表示方式效果是一样的。特别注意,在最后一定要执行exec()函数,所做的操作才能被真正执行。
下面我们就可以利用绑定操作在SQL语句中使用变量了。
- void Widget::on_pushButton_clicked()
- {
- QSqlQuery query;
- query.prepare(“select name from student where id = ?”);
- int id = ui->spinBox->value(); //从界面获取id的值
- query.addBindValue(id); //将id值进行绑定
- query.exec();
- query.next(); //指向第一条记录
- qDebug() << query.value(0).toString();
- }
运行程序,效果如下:
我们改变spinBox的数值大小,然后按下“查询”按钮,可以看到对应的结果就出来了。