在Qt中,操作数据库通常使用Qt SQL模块,该模块提供了一组类来与数据库进行交互。
数据库连接与查询执行
QSqlDatabase::addDatabase(): 添加一个数据库连接。
QSqlDatabase::open(): 打开数据库连接。
QSqlDatabase::close(): 关闭数据库连接。
QSqlQuery: 用于执行SQL查询和获取结果。
QSqlQuery::exec(): 执行SQL语句。
QSqlQuery::next(): 移动到查询结果的下一行。
QSqlQuery::value(): 获取当前行的指定字段值。
QSqlQuery::first(): 移动到查询结果的第一行。
QSqlQuery::last(): 移动到查询结果的最后一行。
QSqlQuery::prev(): 移动到查询结果的前一行。
QSqlQuery::atEnd(): 检查是否已到达查询结果的末尾。
QSqlQuery::record(): 获取当前行的指定字段的QSqlRecord对象。
QSqlQuery::isSelect(): 检查查询是否是SELECT语句。
插入(Create):
QSqlQuery query;
query.prepare("INSERT INTO table_name (column1, column2) VALUES (:value1, :value2)");
query.bindValue(":value1", value1);
query.bindValue(":value2", value2);
query.exec();
查询(Read):
QSqlQuery query;
query.exec("SELECT * FROM table_name WHERE condition");
while (query.next()) {
QVariant value = query.value(columnIndexOrName);
// 处理查询结果
}
更新(Update):
QSqlQuery query;
query.prepare("UPDATE table_name SET column1 = :value1 WHERE condition");
query.bindValue(":value1", newValue);
query.exec();
删除(Delete):
QSqlQuery query;query.exec("DELETE FROM table_name WHERE condition");
多表联查(JOIN):
QSqlQuery query;
query.exec("SELECT a.column1, b.column2 FROM table1 a JOIN table2 b ON a.id = b.foreign_id WHERE some_condition");
while (query.next()) {
QVariant value1 = query.value("column1");
QVariant value2 = query.value("column2");
// 处理查询结果
}
注意事项
在执行SQL查询之前,确保数据库连接已经成功打开。
使用QSqlQuery::prepare()和QSqlQuery::bindValue()来防止SQL注入攻击。
处理查询结果时,要检查QSqlQuery::next()的返回值,以确保还有更多的行可以读取。
对于更新和删除操作,可以检查QSqlQuery::exec()的返回值来确定操作是否成功。如果操作失败,可以使用QSqlQuery::lastError()来获取错误信息。