Yuxian: CSDN コンテンツ パートナー、CSDN の新人スター メンター、フルスタック クリエイティブ スター クリエイター、51CTO (トップ セレブ + エキスパート ブロガー)、Github オープン ソース愛好家 (ゴーゼロ ソース コードの二次開発、ゲーム バックエンド アーキテクチャ https: https:/ /github.com/Peakchen)
Qt QSqlQuery は、Qt で SQL クエリを実行するために使用されるクラスです。データベースのクエリと操作をカプセル化し、データベースを操作するための一連のメソッドを提供します。この記事では、Qt QSqlQuery の基礎となるアーキテクチャ、原理、実装方法を詳しく紹介します。
Qt QSqlQuery の基礎となるアーキテクチャは次の部分で構成されます。
- QSql結果
QSqlResult は、Qt で SQL クエリ結果をカプセル化するために使用されるクラスで、データベース クエリ結果の処理と操作をカプセル化します。Qt では、各データベース システムは QSqlResult 実装クラスに対応し、すべて QSqlResult クラスを継承します。
- QSqlQuery
QSqlQuery は、Qt で SQL クエリを実行するために使用されるクラスです。これはデータベースのクエリと操作をカプセル化し、QSqlResult を使用してクエリ結果を処理します。QSqlQuery を使用する前に、SQL クエリ ステートメントを実行する必要があります。
以下は、QSqlQuery クラスの基礎となるアーキテクチャ図です。
+-----------------+
| QSqlQuery |
+-----------------+
| - driver |
| - result |
| - active |
| - forwardOnly |
| - select |
+-----------------+
/_\
|
| 继承
|
+-----------------+
| QSqlDriver |
+-----------------+
| - db |
+-----------------+
/_\
|
| 实例化
|
+-----------------+
| QSqlQuery |
+-----------------+
このアーキテクチャでは、QSqlQuery クラスは SQL クエリ ステートメントの抽象化であり、クエリに関連するドライバー、クエリ結果、クエリ ステータスなどの情報が含まれています。QSqlDriver クラスは、データベースに接続して操作するための一連の純粋仮想関数を定義する抽象クラスであり、各データベース ドライバーによって実装する必要があります。QSqlQuery クラスがインスタンス化されると、実際の接続と SQL クエリ ステートメントの実行のために、対応する QSqlDriver オブジェクトが作成されます。
Qt では、次のメソッドを使用して SQL クエリを実行できます。
- QSqlQuery::prepare()
prepare() メソッドは、実行する SQL クエリ ステートメントを準備するために使用されます。例えば:
QSqlQuery query;
query.prepare("SELECT * FROM mytable WHERE age > ?");
- QSqlQuery::bindValue()
bindValue() メソッドは、SQL クエリ ステートメントのパラメータ値をバインドするために使用されます。例えば:
query.bindValue(0, 30);
- QSqlQuery::exec()
exec() メソッドは、SQL クエリを実行し、クエリ結果を QSqlQuery オブジェクトに保存するために使用されます。例えば:
if (query.exec()) {
while (query.next()) {
QString name = query.value("name").toString();
int age = query.value("age").toInt();
// 处理查询结果
}
} else {
qWarning() << "Failed to execute SQL statement:" << query.lastError().text();
}
- QSqlQuery::value()
value() メソッドは、クエリ結果内の指定された列の値を取得するために使用されます。例えば:
QString name = query.value("name").toString();
- QSqlQuery::lastError()
lastError() メソッドは、最後のクエリ操作のエラー メッセージを取得するために使用されます。例えば:
qWarning() << "Failed to execute SQL statement:" << query.lastError().text();
以下は、上記のメソッドの使用を含む、簡単な Qt QSqlQuery 実装例です。
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
// 添加MySQL数据库连接
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("mydatabase");
db.setUserName("myusername");
db.setPassword("mypassword");
// 打开数据库连接
if (db.open()) {
qInfo() << "Database connection opened";
// 执行SQL查询
QSqlQuery query;
query.prepare("SELECT * FROM mytable WHERE age > ?");
query.bindValue(0, 30);
if (query.exec()) {
while (query.next()) {
QString name = query.value("name").toString();
int age = query.value("age").toInt();
qInfo() << "Name:" << name << "Age:" << age;
}
} else {
qWarning() << "Failed to execute SQL statement:" << query.lastError().text();
}
// 关闭数据库连接
db.close();
qInfo() << "Database connection closed";
} else {
qWarning() << "Failed to open database connection:" << db.lastError().text();
}
return app.exec();
}
上記の例では、まず addDatabase() メソッドを使用して MySQL データベース接続を追加し、接続情報を設定します。次に、open() メソッドを使用してデータベース接続を開き、SQL クエリ操作を実行します。最後に、close() メソッドを使用してデータベース接続を閉じます。
Qt QSqlQuery は SQL クエリを実行する便利な方法を提供し、その基礎となるアーキテクチャと実装方法は比較的シンプルで理解しやすいです。上記の方法に従って実行する SQL クエリ ステートメントを準備し、パラメータ値をバインドしてクエリを実行するだけで、クエリ操作が完了します。