Qtの基礎 - データベース

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
2023年11月27日 (月) 20:35時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == <br><br> == SQLite3 == Qtを使用してSQLite3のテーブルにアクセスする場合、まず、<code>QSqlDatabase</code>クラスを使用してデータベースに接続する。<br> <syntaxhighlight lang="c++"> #include <QSqlDatabase> #include <QSqlQuery> // SQLiteデータベースに接続する QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("<SQLiteデータベース名>.sqlite"); // データベース…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要



SQLite3

Qtを使用してSQLite3のテーブルにアクセスする場合、まず、QSqlDatabaseクラスを使用してデータベースに接続する。

 #include <QSqlDatabase>
 #include <QSqlQuery>
 
 // SQLiteデータベースに接続する
 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
 db.setDatabaseName("<SQLiteデータベース名>.sqlite");  // データベースファイル名
 
 if (!db.open())
 {
    qDebug() << "データベースに接続できませんでした。";
    return;
 }


次に、QSqlQueryクラスを使用してクエリを実行する。
以下の例では、テーブルのデータを取得している。

 QSqlQuery query;
 query.prepare("SELECT * FROM <SQLiteデータベースのテーブル名>");
 
 if (query.exec())
 {
    while (query.next())
    {  // レコードの処理
       QString column1 = query.value(0).toString(); // 1番目の列
       QString column2 = query.value(1).toString(); // 2番目の列
 
       // 他の列も同様に取得できる
    }
 }
 else
 {
    qDebug() << "クエリの実行に失敗しました.";
 }
 
 // データベース接続を閉じる
 db.close();



SQLインジェクション対策

SQLインジェクション対策では、プレースホルダを使用してクエリを構築することが重要である。

以下の例では、":username"がプレースホルダとなり、ユーザからの入力等が直接クエリに組み込まれることなく、安全にクエリが実行される。
また、ユーザからの入力をクエリに組み込む場合、入力データを適切にサニタイズしてクエリに含めるようにすることにより、悪意のあるSQLコードが挿入されても実行されないようにする。

 QSqlQuery query;
 QString username = "user_input";  // ユーザからの入力等
 
 // プレースホルダを使用して安全にクエリを構築
 query.prepare("SELECT * FROM users WHERE username = :username");
 query.bindValue(":username", username);
 
 if (query.exec())
 {
    while (query.next())
    {  // レコードの処理
       // ...略
    }
 }
 else
 {
    qDebug() << "クエリの実行に失敗しました.";
 }