首先我们来看看如何使用QSqlTableModel 进行 SELECT 操作:

    我们依旧使用了前一章的connect()函数。接下来我们创建了QSqlTableModel实例,使用函数设置所需要操作的表格;setFilter()函数则是添加过滤器,也就是 WHERE 语句所需要的部分。例如上面代码中的操作实际相当于 SQL 语句

      使用QSqlTableModel::select()函数进行操作,也就是执行了查询操作。如果查询成功,函数返回 true,由此判断是否发生了错误。如果没有错误,我们使用record()函数取出一行记录,该记录是以QSqlRecord的形式给出的,而QSqlRecord::value()则取出一个列的实际数据值。注意,由于QSqlTableModel没有提供const_iterator遍历器,因此不能使用foreach宏进行遍历。

      下面一段代码则显示了如何使用QSqlTableModel进行插入操作:

      1. QSqlTableModel model;
      2. model.setTable("student");
      3. int row = 0;
      4. model.insertRows(row, 1);
      5. model.setData(model.index(row, 1), "Cheng");
      6. model.setData(model.index(row, 2), 24);
      7. model.submitAll();

      插入也很简单:model.insertRows(row, 1);说明我们想在索引 0 的位置插入 1 行新的数据。使用setData()函数则开始准备实际需要插入的数据。注意这里我们向 row 的第一个位置写入 Cheng(通过model.index(row, 1),回忆一下,我们把 model 当作一个二维表,这个坐标相当于第 row 行第 1 列),其余以此类推。最后,调用submitAll()函数提交所有修改。这里执行的操作可以用如下 SQL 表示:

      当我们取出了已经存在的数据后,对其进行修改,然后重新写入数据库,即完成了一次更新操作:

      1. QSqlTableModel model;
      2. model.setTable("student");
      3. model.setFilter("age = 25");
      4. if (model.rowCount() == 1) {
      5. QSqlRecord record = model.record(0);
      6. record.setValue("age", 26);
      7. model.setRecord(0, record);
      8. model.submitAll();
      9. }
      10. }
      1. if (model.select()) {
      2. if (model.rowCount() == 1) {
      3. model.setData(model.index(0, 2), 26);
      4. }
      5. }

      注意我们的 age 列是第 3 列,索引值为 2,因为前面还有 id 和 name 两列。这里的更新操作则可以用如下 SQL 表示:

      删除操作同更新类似:

      1. QSqlTableModel model;
      2. model.setTable("student");
      3. model.setFilter("age = 25");
      4. if (model.select()) {
      5. if (model.rowCount() == 1) {
      6. model.removeRows(0, 1);
      7. model.submitAll();
      8. }

      如果使用 SQL 则是:

      1. DELETE FROM student WHERE age = 25