Featured image of post C++からMariaDBへの接続

C++からMariaDBへの接続

C++でMariaDBデータベースに接続する簡単な方法の一つを記録しています。また、簡単な改造でMySQLへ接続することも可能です。

環境: Dev-C++ 5.11、GCC 4.9.2、MariaDB 10.6

設定手順:

  1. MariaDBがインストールされているディレクトリの中のincludeフォルダとlibフォルダを、それぞれコンパイルオプションに記載されているインクルードディレクトリとライブラリディレクトリに上書きします。
  2. コンパイルオプションのコネクタコマンドラインに次のコマンドを追加します:-lmariadb
  3. libフォルダからlibmariadb.dllをソースコードのあるディレクトリにコピーします。

接続とデバッグのソースコード:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <mysql/mysql.h>
using namespace std;

MYSQL *link;
MYSQL_RES *res;
MYSQL_ROW row;

int main(){
    /* ターミナルのコードページをUTF-8に設定
         日本語OSでのDev-C++のデフォルトの符号化方式はShift JISで変更できないため、
         これによりUTF-8のデータベースが正しく表示されるようになります。
         また、データベース作成時に符号化方式をShift JISにすることで、
         以下の2行を削除することができます。 */
    system("chcp 65001");
    system("cls");

    /* 接続の作成 */
    link = mysql_init(NULL);
    if(!mysql_real_connect(link, "localhost", "root", "YOUR_PASSWORD"/* パスワード */, "school"/* データベースの名前 */, 0, NULL, 0))
        fprintf(stderr, "%s\n", mysql_error(link));

    /* テーブル一覧の出力 */
    if(mysql_query(link, "SHOW TABLES;"))
        fprintf(stderr, "%s\n", mysql_error(link));
    res = mysql_use_result(link);
    cout<<"MySQL Tables in school database:"<<endl;
    while((row = mysql_fetch_row(res)) != NULL)
        cout<<row[0]<<endl;

    /* SELECT文の実行と出力 */
    char sql[] = "SELECT sno, sname FROM student WHERE sno IN (SELECT sno FROM sc GROUP BY sno HAVING COUNT(*) >= 2);";
    mysql_query(link, sql);
    res = mysql_store_result(link);
    for(int i = 0; i < mysql_num_rows(res); i++){
        row = mysql_fetch_row(res);
        cout<<row[0]<<'\t'<<row[1]<<endl;
    }

    /* メモリの解放と接続の終了 */
    mysql_free_result(res);
    mysql_close(link);

    return 0;
}

実行:

上記コードの実行

関数の詳細な説明については、ご自身で公式ドキュメントをご参照ください。