SQLiteについてのイメージ

代表的な日本語プログラムでは各種データベースを扱うことが出来ます。今回は「なでしこ」「プルデル」の両方に梱包されているSQLiteについてのイメージを少し書きます。
SQLはデータベースを扱うために独立した言語で、使用しているプログラムの中からSQLを呼び出す形で指示を与えて使います。SQLは独立した言語なので是非覚えましょう。今回紹介するSQLiteはパソコン単体で使用することが出来るデータベースでSQLの入門学習に適しています。
今回は日本語プログラムを対象にしていますが、PHP等の他言語でも使い方は同じです。

(以前私が改造したサンプルプログラムはこちらを参考にしてください。)

ここでは表計算ソフトの画面コピーを使いながらイメージだけ掴んでください。SQLについてはネット上に詳細な解説が大量にあるのでそちらを参考になさってください。

プロデルにはサンプルが用意されています。プロデルを標準的にインストールをした場合、サンプルは「C:\Program Files (x86)\Produire\サンプル」フォルダの中にあります。

SQLのサンプルは「C:\Program Files (x86)\Produire\サンプル\データ操作\データベース」に存在しています。
SQLサンプルフォルダ

今回使用するサンプルプログラムは「プロデルでSQLite.rdr」です。
——————————ここから
1    //
2    //サンプルは「プロデルでSQLite.rdr」
3    //
4    //
5    // プロデルからSQLiteデータベースを操作する例 //
6    //SQLiteを利用するには、System.Data.SQLite.dllが必要です
7
8    「Produire.Data.SQLite.dll」を利用する
9    SQLiteというSQLiteデータベースを作る
10
11    SQLiteのデータソースを、「database.db」に変える
12    SQLiteへ接続する
13
14    テーブルを作成する
15
16    データを取得する
17    データを追加する
18    データを更新する
19    データを削除する
20
21    テーブルを破棄する
22
23    SQLiteから切断する
24
25
26
27    テーブルを、作成する手順
28         ーーテーブルの作成
29         SQLiteで「CREATE TABLE 楽曲 (
30              曲名 TEXT,
31              アーティスト TEXT,
32              アルバムID NUMBER);」を実行する
33    終わり
34
35    データを、取得する手順
36         ーーデータの取得
37         SQLiteから「SELECT 曲名,アーティスト FROM 楽曲」を取得して結果とする
38         「初期状態」として結果の内容を情報アイコンで表示する
39    終わり
40
41    データを、追加する手順
42         ーーデータの追加
43         SQL文は、「INSERT INTO 楽曲 (曲名,アーティスト) VALUES (?, ?)」
44         バインド値は、{「I am your singer」、「サザンオールスターズ」}
45         SQL文をバインド値としてSQLiteで実行して、件数1とする
46
47         バインド値は、{「勝手にシンドバット」、「サザンオールスターズ」}
48         SQL文をバインド値としてSQLiteで実行して、件数2とする
49
50         ーー内容の確認
51         SQLiteから「SELECT 曲名,アーティスト FROM 楽曲」を取得して、結果とする
52         「追加後」として「[件数1+件数2]件、追加しました。[改行][結果の内容]」を情報アイコンで表示する
53    終わり
54
55    データを、更新する手順
56         ーーデータの更新
57         SQL文は、「UPDATE 楽曲 SET 曲名=? WHERE 曲名=?」
58         バインド値は、{「I AM YOUR SINGER」、「I am your singer」}
59         SQL文をバインド値としてSQLiteで実行して、件数とする
60
61         ーー内容の確認
62         SQL文は、「SELECT 曲名,アーティスト FROM 楽曲 WHERE 曲名=?」
63         バインド値は、{「I AM YOUR SINGER」}
64         SQLiteからSQL文をバインド値として取得して、結果とする
65         「更新後」として「[件数]件、更新しました。[改行][結果の内容]」を情報アイコンで表示する
66    終わり
67
68    データを、削除する手順
69         ーーデータの削除
70         SQL文は、「DELETE FROM 楽曲 WHERE アーティスト=?」
71         バインド値は、{「サザンオールスターズ」}
72         SQL文をバインド値としてSQLiteで実行して、件数とする
73
74         ーー内容の確認
75         SQLiteから「SELECT 曲名,アーティスト FROM 楽曲」を取得して、結果とする
76         「削除後」として「[件数]件、削除しました。[改行][結果の内容]」を情報アイコンで表示する
77    終わり
78
79    テーブルを、破棄する手順
80         ーーテーブルの破棄
81         SQLiteで「DROP TABLE 楽曲
——————————ここまで

各行ごとに適当に解説

8行目 「Produire.Data.SQLite.dll」を利用する
頭のコメント欄に書いてあるように使用するDLLを指定します。
プログラム言語が、最初から使わないものを組み込んでおくとサイズばかり大きくなるために使用する時に呼び出す使い方をします。

9行目から12行目まではそのまま使用します。

9    SQLiteというSQLiteデータベースを作る
10
11    SQLiteのデータソースを、「database.db」に変える
12    SQLiteへ接続する

11行目の「database.db」の名前は分かりやすいものに変更してください。サンプルを動かす場合は、そのままでも構いません。(同じ名前のファイルが存在した場合エラーになります。)ここまでの作業を表計算ソフトに例えれば、表計算ソフトを起動するまでの手順です。

起動
表計算ソフトならこんな状態。

14    テーブルを作成する
テーブルを作成する手順(オブジェクト)を呼び出します。(27行目から33行まで)

27    テーブルを、作成する手順
28         ーーテーブルの作成
29         SQLiteでCREATE TABLE 楽曲 (
30              曲名 TEXT,
31              アーティスト TEXT,
32              アルバムID NUMBER);を実行する
33    終わり
テーブルを作る
表計算ソフトに例えるならこんな状態です。2行目は無視してください。

データベースに新しいテーブルと属性を指定します(表計算ソフトに例えるとシート名と各列名と列の属性を指定します。)

テーブル名 = シート名
項目名   = 列名

この列は後からでも増やしたり減らしたりすることが出来ます。ここではテーブルの中に3つの列を作成しました。1列目は「曲名」、2列目は「アーティスト」、3列目は「アルバムID」が作成されます。

16    データを取得する

楽曲テーブル(楽曲シート)が出来たのでデータを読み込みます。この段階ではデータは空です。

35    データを、取得する手順
36         ーーデータの取得
37         SQLiteから「SELECT 曲名,アーティスト FROM 楽曲」を取得して結果とする
38         「初期状態」として結果の内容を情報アイコンで表示する
39    終わり

データを取得
表計算ソフトなら色のついた部分に条件に合ったデータが読み込まれるイメージです。(今回の例では空です。)

17    データを追加する

楽曲テーブル(楽曲シート)にデータを追加します。

41    データを、追加する手順
42         ーーデータの追加
43         SQL文は、「INSERT INTO 楽曲 (曲名,アーティスト) VALUES (?, ?)」
44         バインド値は、{「I am your singer」、「サザンオールスターズ」}
45         SQL文をバインド値としてSQLiteで実行して、件数1とする

楽曲テーブルで設定した項目名「曲名」と「アーティスト」に追加するデータ(値)を入れます。

値1, 値2= VALUES (?, ?)

VALUES (?, ?)にバインド値を設定します。バインド値とは対応する値を割り当てることで、この場合(曲名、アーティスト)となります。追加する項目の数だけ()の中が増えます。

実際に追加するデータを44行目でバインド値を指定し、45行目でSQLに渡します。

追加
表計算ソフトならデータが追加されたイメージです。

46
47         バインド値は、{「勝手にシンドバット」、「サザンオールスターズ」}
48         SQL文をバインド値としてSQLiteで実行して、件数2とする

47行目で新たなバインド値を設定してデータを追加します。

2つ目追加

表計算ソフトならデータが更に追加されたイメージです。

50         ーー内容の確認
51         SQLiteから「SELECT 曲名,アーティスト FROM 楽曲」を取得して、結果とする

51行目で、曲名とアーティストを楽曲テーブルから読み込み、見つけたデータを「結果」にセットします

52         「追加後」として「[件数1+件数2]件、追加しました。[改行][結果の内容]」を情報アイコンで表示する
53    終わり

結果表示

結果の内容を画面に表示します。

55    データを、更新する手順

データの内容を変更する場合にデータの更新をする必要があります。

56         ーーデータの更新
57         SQL文は、「UPDATE 楽曲 SET 曲名=? WHERE 曲名=?」
58         バインド値は、{「I AM YOUR SINGER」、「I am your singer」}
59         SQL文をバインド値としてSQLiteで実行して、件数とする

57行目のUPDATEで 楽曲テーブルの中にある曲名を変更する指示をします。どんなデータを更新するのかはWHERE 曲名=?で指定します。

バインド値で「新しい値」、「古い値」を指定してSQLを実行します。

更新
表計算ソフトならこんな感じでしょうか?

SQL文として書くと次のような感じです。

  1. データベーのス(以下、DB)を最初に作り接続する。
  2. DBの中にテーブルを作る。
  3. DBの中にテーブルにデータを書き込む。
  4. DBの中にテーブルに入っているデータを変更する。
  5. DBの中にテーブルに入っているデータを削除する。
  6. DBの中にテーブルを破棄する。
  7. DBとの接続を切断する。

1.最初に「枠の名前.db」というデータを入れる枠(グループ)を作ります。平たく言えばグループ名ですね。(このサンプルでは「database.DB」)
これは只の枠(グループ)なので、実際データを入れる場所はテーブルとして枠(グループ)の中に別途に作成します。枠(グループ)の中には複数のテーブルを作ることが出来ます。通常は枠(グループ)を消すことは無いので最初に1度枠を作れば済みます。今から枠を使うよ!という合図が「接続する」の意味です。(あくまでも日本語プログラム向けに大胆に大雑把な説明です。)

2.実際にデータを入れる場所(テーブル)を作ります。
SQL文では以下のように書きます。
CREATE TABLE 楽曲 ( 曲名 TEXT, アーティスト TEXT,アルバムID NUMBER)

3.テーブルの中にデータを書き込みます。
SQL文では以下のように書きます。
INSERT INTO 楽曲 (曲名,アーティスト) VALUES (?, ?)
バインド値は、{「I am your singer」、「サザンオールスターズ」}

4.テーブルの中のデータを更新します。
SQL文では以下のように書きます。
UPDATE 楽曲 SET 曲名=? WHERE 曲名=?
バインド値は、{「I AM YOUR SINGER」、「I am your singer」}

5.テーブルの中のデータを削除します。
SQL文では以下のように書きます。
DELETE FROM 楽曲 WHERE アーティスト=?
バインド値は、{「サザンオールスターズ」

6.テーブルを破棄します。
SQL文では以下のように書きます。
DROP TABLE 楽曲

ここ数日プロデルを学習中

サンプルプログラムを元に
こんなサンプルを作ってみた。

SQLiteを操作するサンプル

// プロデルからSQLiteデータベースを操作する例(改造-画面追加)

——————————ここから

// プロデルからSQLiteデータベースを操作する例(改造-画面追加)
// プロデルサンプル例に画面とボタン、テキスト蘭を追加
//SQLiteを利用するには、System.Data.SQLite.dllが必要です

「Produire.Data.SQLite.dll」を利用する
SQLiteというSQLiteデータベースを作る

SQLiteのデータソースを、「database.db」に変える
SQLiteへ接続する

メイン画面を表示する
待機する

メイン画面とは
ウィンドウを継承する
はじめの手順
初期化する
ーー貼り付けた部品に対する操作をここに書きます
終わり
初期化する手順
ーー自動生成された手順です。ここにプログラムを書き加えても消える場合があります
この内部領域大きさを{472,429}に変える
この内容を「メイン画面」に変える
メモメモというテキスト領域を作る
その位置と大きさを{25,213,249,79}に変える
その移動順を4に変える
そのドラッグドロップを×に変える
ボタン1というボタンを作る
その位置と大きさを{320,67,61,28}に変える
その内容を「テーブルを作成する」に変える
その移動順を3に変える
そのドラッグドロップを×に変える
テキスト1というテキストを作る
その位置と大きさを{71,66,134,19}に変える
その移動順を5に変える
そのドラッグドロップを×に変える
テキスト2というテキストを作る
その位置と大きさを{71,110,134,19}に変える
その移動順を1に変える
そのドラッグドロップを×に変える
テキスト3というテキストを作る
その位置と大きさを{71,156,134,19}に変える
その移動順を2に変える
そのドラッグドロップを×に変える
ボタン2というボタンを作る
その位置と大きさを{320,110,61,28}に変える
その内容を「データを取得する」に変える
その移動順を5に変える
そのドラッグドロップを×に変える
ボタン3というボタンを作る
その位置と大きさを{320,151,61,28}に変える
その内容を「データを追加する」に変える
その移動順を6に変える
そのドラッグドロップを×に変える
ボタン4というボタンを作る
その位置と大きさを{320,195,61,28}に変える
その内容を「データを更新する」に変える
その移動順を7に変える
そのドラッグドロップを×に変える
ボタン5というボタンを作る
その位置と大きさを{320,239,61,28}に変える
その内容を「データを削除する」に変える
その移動順を8に変える
そのドラッグドロップを×に変える
ボタン6というボタンを作る
その位置と大きさを{320,287,61,28}に変える
その内容を「テーブルを破棄する」に変える
その移動順を9に変える
そのドラッグドロップを×に変える
ボタン7というボタンを作る
その位置と大きさを{25,380,111,28}に変える
その内容を「SQLiteから切断する」に変える
その移動順を10に変える
そのドラッグドロップを×に変える
終わり

ボタン1がクリックされた時の手順
テキスト1を、クリアする
テキスト1へ「テーブルを、作成する手順」を、先頭へ挿入する
メモメモへ「データを、追加する手順」を、先頭へ挿入する
ボタン1の有効を「×」に変える

//テーブルを、作成する手順
ーーテーブルの作成
SQLiteで「CREATE TABLE 楽曲 (
曲名 TEXT,
アーティスト TEXT,
アルバムID NUMBER);」を実行する
終わり

ボタン2がクリックされた時の手順
テキスト1を、クリアする
テキスト1へ「データを、取得する手順」を、先頭へ挿入する
メモメモへ「データを、追加する手順」を、先頭へ挿入する
ボタン2の有効を「×」に変える

//データを、取得する手順
ーーデータの取得
SQLiteから「SELECT 曲名,アーティスト FROM 楽曲」を取得して結果とする
//「初期状態」として結果の内容を情報アイコンで表示する
メモメモをクリアする
メモメモへ「[結果]」を、先頭へ挿入する

終わり

ボタン3がクリックされた時の手順
//データを、追加する手順
テキスト1を、クリアする
テキスト1へ「データを、追加する手順」を、先頭へ挿入する
メモメモへ「データを、追加する手順」を、先頭へ挿入する

ーーデータの追加
SQL文は、「INSERT INTO 楽曲 (曲名,アーティスト) VALUES (?, ?)」
バインド値は、{「I am your singer」、「サザンオールスターズ」}
SQL文をバインド値としてSQLiteで実行して、件数1とする
テキスト2へ「[バインド値(1)]」を、先頭へ挿入する

バインド値は、{「勝手にシンドバット」、「サザンオールスターズ」}
SQL文をバインド値としてSQLiteで実行して、件数2とする
テキスト3へ「[バインド値(1)]」を、先頭へ挿入する

ーー内容の確認
SQLiteから「SELECT 曲名,アーティスト FROM 楽曲」を取得して、結果とする
「追加後」として「[件数1+件数2]件、追加しました。[改行][結果の内容]」を情報アイコンで表示する
メモメモをクリアする
メモメモへ「[結果]」を、先頭へ挿入する

終わり

ボタン4がクリックされた時の手順
テキスト1を、クリアする
テキスト1へ「データを、更新する手順」を、先頭へ挿入する
メモメモをクリアする
メモメモへ「データを、追加する手順」を、先頭へ挿入する

//データを、更新する手順
ーーデータの更新
SQL文は、「UPDATE 楽曲 SET 曲名=? WHERE 曲名=?」
バインド値は、{「I AM YOUR SINGER」、「I am your singer」}
SQL文をバインド値としてSQLiteで実行して、件数とする

ーー内容の確認
SQL文は、「SELECT 曲名,アーティスト FROM 楽曲 WHERE 曲名=?」
バインド値は、{「I AM YOUR SINGER」}
SQLiteからSQL文をバインド値として取得して、結果とする
//「更新後」として「[件数]件、更新しました。[改行][結果の内容]」を情報アイコンで表示する
メモメモをクリアする
メモメモへ「[結果]」を、先頭へ挿入する
終わり

ボタン5がクリックされた時の手順
テキスト1を、クリアする
テキスト1へ「データを、削除する手順」を、先頭へ挿入する
メモメモへ「データを、追加する手順」を、先頭へ挿入する

//データを、削除する手順
SQLiteから「SELECT 曲名,アーティスト FROM 楽曲」を取得して、結果とする
ーーデータの削除
SQL文は、「DELETE FROM 楽曲 WHERE アーティスト=?」
バインド値は、{「サザンオールスターズ」}
SQL文をバインド値としてSQLiteで実行して、件数とする

ーー内容の確認
SQLiteから「SELECT 曲名,アーティスト FROM 楽曲」を取得して、結果とする
//「削除後」として「[件数]件、削除しました。[改行][結果の内容]」を情報アイコンで表示する
メモメモをクリアする
メモメモへ「削除しました。」を、先頭へ挿入する
終わり

ボタン6がクリックされた時の手順
テキスト1を、クリアする
テキスト1へ「テーブルを、破棄する手順」を、先頭へ挿入する
メモメモをクリアする
メモメモへ「テーブルを、破棄する手順」を、先頭へ挿入する
ボタン6の有効を「×」に変える

//テーブルを、破棄する手順
ーーテーブルの破棄
SQLiteで「DROP TABLE 楽曲」を実行する
終わり

ボタン7がクリックされた時の手順
SQLiteから切断する
終了
終わり

テキスト領域が内容が変化した時の手順
テキスト1を、クリアする
メモメモへ「テーブルを、破棄する手順」を、先頭へ挿入する

終わり
終わり

——————————ここまで