C++ Qt Programming - 51 - 57 - 数据库编程
1 这里用的ODBC,数据库连接参考上一课,但上一课没有db.close()?
2 how to make a query?
QSqlQuery qry; // query: 查询
if (qry.exec("select * from table")) {
while (qry.next()) { // 遍历每一行
qDebug() << qry.value(1).toString(); // 第一列的值
}
} else {
qDebug() << "error = " << db.lastError().text();
}
3 prepare and bindValue 插入数据:
// 注意冒号, 为什么不直接写,而用prepare和bindValue
QString sQuery = "INSERT INTO [test].[dbo].[people] ([FirstName], LastName]) VALUES(:first, :last)";
QSqlQuery qry;
qry.prepare(sQuery);
qry.bindValue(":first", "san");
qry.bindValue(":first", "zhang");
if (qry.exec()) {
qDebug() << "Record Inserted";
}
qDebug() << "Closing...";
db.close();
4 QSqlDatabase with DSN - 54课:
关系windows系统odbc的设置
5 QSqlQueryModel 显示表格
和之前课程的model/view课程差不多,先调用model的set数据的函数,在调用view的setmodel函数
model = new QSqlQueryModel(this);
model->setQuery("SELECT.....");
ui->tableView->setModel(model);
问题:不能编辑
6 QSqlTableModel(黑马用的这个)
// 表格内容可编辑
model = new QSqlTableModel(this);
model->setTable("People");
model->select();
qDebug() << model->lastError().text(); // 如果表格内容不显示,这里会打印
ui->tableView->setModel(model);
7 著名的QSqlRelationalTableModel
QSqlRelationalTableModel可以用来设置不同表格之间的relation
people表的ID = wages表的person,如下是代码的显示内容,主要是setRelation接口
model = new QSqlRelationalTableModel(this);
model->setTable("People");
model->setRelation(0, QSqlRelation("wages", "id", "salary")); //id column in people and the salary 应该连在一起
model->select();
ui->tableView->setModel(model);
model的数据是people,把它和wages表关联起来,输出关联之后的表
sql server中还有更简单的方式:在sql server的views中进行操作