プログラミング C++ 関連の技術メモ【SQLite の 活用方法(その1)】

SQLite 技術メモ

 

 SQLite というものをご存じだろうか。RDBの1つであり、無償で利用可能なライブラリ群そのものである。特徴としては、非常に軽量でかつ使いやすく、以下、Wikiにもある通り、データの保存に単一のファイルのみを使用することが特徴とするファイルベースであるところである。

 

SQLiteエスキューライトエスキューエライト、なお、開発者のHippはエスキューエルアイト(/ˌɛsˌkjuːˌɛlˈaɪt/)と発音している)は、パブリックドメインの軽量な関係データベース管理システム (RDBMS) である。

概要

サーバとしてではなくアプリケーションに組み込んで利用されるデータベースである。 一般的なRDBMSと違い、APIは単純にライブラリを呼び出すだけであり、データの保存に単一のファイルのみを使用することが特徴である。バージョン3.3.8からは全文検索のFTS1モジュールがサポートされた。その後 FTS2 - FTS3 と強化を続けバージョン3.7.4からはFTS4モジュールがサポートされている。

 

「直接原価計算」『フリー百科事典 ウィキペディア日本語版』。2022年10月25日 (火) 14:14  UTCURL: SQLite - Wikipedia

 

 ここでは、SQLiteについて調査した事項をメモとして、残していく。

 

SQLite コマンドツールで遊んでみる

 

 いきなりプログラムで試す前に、コマンドラインベースで、SQLiteを試すことができるコマンドツールが公開されている。まずはこいつで遊んでみよう。

https://www.sqlite.org/

 

上記のトップページが開いたら、上部の方のDowloadをクリック。開いたページに、いろいろダウンロードリストがあるので、以下の"sqlite-tools-win32-x86-XXXXXXX.zip" を好きなところにダウンロードして配置しよう。

 

 解凍すると以下の3つのファイルが入っているのを確認する。

 さっそく、使ってみましょう。そのまま簡単に使えるのが、SQLiteのとってもお手軽なところです。コマンドプロンプトを開き、これらのexeが入っているフォルダに移動します。もうこれで準備は完了です。

データベースを作成して、データベースに接続します。フォルダ内で、以下のように入力します。

sqlite3 [データベース名(例:test.db)]


実行すると上記の状態になります。SQLiteのデータベースに接続され、データベースに対してコマンドが受け付けられる状態になっています。

せっかくなので、テーブルをひとつ作ってみます。この辺のSQL構文などは、別途どこかで、SQLを題材に説明していきたいと思います。

 

"test_table"で、要素がitem1とitem2 のテーブルを作成する。
create table test_table(item1, item2);

 

作ったテーブルを表示してみます。

 

テーブルの一覧を表示する
sqlite> .table

 

 実行結果は以下のようになります。

 そして、この時点で、フォルダ内を確認してみてください。以下のように、test.dbが保管されているのが分かると思います。このようにsqliteでは、データベースを作成すると、ひとつのファイルが作成され、この中で全てが管理されます。

 

 とりあえず、データをINSERTしてみよう。今回、テーブルの列には、データ型を指定していない。入力値に応じて、よしなに扱ってくれるようだ。

データをINSERTする。
sqlite> insert into [テーブル名] values(データ1, データ2, …);

 

INSERTしてみたら、とりあえず、select文を使ってデータを出してみる。

ふむふむ。ちゃんと入っているな。しかし、見にくい。

以下のように、.modeコマンドを使えば、いろいろと表示方法を指定できるらしい。とりあえず、列表示をきれいに出力されるようにしてみる。

 

 

うまいことデータがはいっているみたいです。しかし、これ実際データ型ってどうなっているんだろう。以下のように、typeof で格納されているデータ型を見ることができます。

ちゃんと、データを見て、text型、integer型に分けて保管してくれていますね。

ちょっとカラムを追加してみましょう。

 

既存のテーブルにカラムを追加する。
sqlite> alter table [テーブル名] add column [列名] [データ型];

とりあえずitem3を追加。既存データは空なので、以下のような感じになります。

item3に日本語を入れてみましょう。

既存の列の特定列を更新する。
sqlite> update [テーブル名] set [列名] = [データ型] where [更新データの条件];

おお、日本語がちゃんと入りますね!

となると、列名がどうかいうのが気になります。やってみましょう。

あれ!?普通にできます。これはさすがに失敗するかと思いました。
ついでにデータも入れてみましょう。

普通にupdateもできました。やや、全角文字が入ると、データ表示が崩れているのがいまいちではありますが。問題なくできたのは意外です。

最後、データベースの接続を切るときは、.exitと入力します。

とりあえずお試しで使ってみましたが、お手軽にデータベースが触れますね。次回は、いよいよ、C++コードから、SQLiteのライブラリを使用して、同じことができるか確認してみましょう。