BASIC!は、Androidで動くBASIC インタープリタです。詳しくは以下をどうぞ。
BASIC!ではAndroidに標準で搭載されているデータベースSQLiteを一部機能限定ですが利用可能です。
久々に使ってみようと思い、記憶をたどるのに苦労したので使う人はいないと思いますがまとめます。
本稿ではDB(テーブル)作成〜データ投入〜データ内容の確認について記載します。
1.SQLIteとは
Androidで何もインストールしないで使えるリレーショナルデータベースです。その程度の知識しかありません。詳しくはウィキペディアをご覧ください。
可搬性に優れているので他のタブレットにコピーしたい場合でも.dbファイルをコピーするだけで利用可能です。
2.BASIC!でのSQLiteの利用の前提
本来のSQLiteは画像データなども保存可能なようですがBASIC!で扱えるデータは文字列型のみです。
また、利用するSQLiteのデータベースの配置先はBASIC!をインストールすると作成されるrfo-basicディレクトリ配下のdatabasesディレクトリになります。
3. 今回作成するデータベース、テーブル
今回作成するデータベースはメモ用のデータを格納します。項目と内容は以下の通り。全て文字列型の項目です。
- _id : SQLiteで自動で作成されるレコード通番
- bunrui : メモの分類
- kenmei : メモの件名
- picurl : メモと関連する画像URL
- naiyou : メモの内容
- updymd : 更新日時(YYYYMMDDHHMMSS)
DB名は「treememo.db」、テーブル名は「tree001」で作成し、テストしてます。
4.データベース、テーブルの作成
BASIC!のプログラムでデータベースとテーブルを作成します。プログラムのポイントは以下の通りです。
- SQL.OPEN命令でデータベースを作成。
DB名がパラメータ。DBが存在しなければ作成、存在すればオープンしてそのポインターがセットされます。
- SQL.NEW_TABLE命令でテーブルを生成。
DBポインターとテーブル名と項目名がパラメータ。項目は全て文字列項目になります。
- SQL.CLOSE命令でデータベースを閉じる。
DBポインターがパラメータ。
REM Start of BASIC! Program
rem DB generate
!------- TBL Initialize (NEW) routine -----
syoki:
dbname$="treememo.db"
SQL.OPEN DB_Ptr, dbname$
tbname$ = "tree001"
c1$ = "bunrui"
c2$ = "kenmei"
c3$ = "picurl"
c4$ = "naiyou"
c5$ = "updymd"
SQL.NEW_TABLE DB_Ptr, tbname$, c1$, c2$, c3$, c4$,c5$
SQL.CLOSE DB_Ptr
end
5.テーブルへのデータの投入
BASIC!のプログラムでテーブルにデータを作成します。プログラムのポイントは以下の通りです。
- SQL.OPEN命令でデータベースを開く。
DB名がパラメータ。DBが存在しているので、オープンしてそのポインターがセットされます。
- SQL.INSERT命令でデータをテーブルに挿入。
DBポインターとテーブル名と(項目名、データ内容)のペア(項目数分)がパラメータ。項目は全て文字列項目になります。投入するデータの行数分、複数回実行します。
- SQL.CLOSE命令でデータベースを閉じる。
DBポインターがパラメータ。
REM Start of BASIC! Program
rem TBL insert
!------- TBL Insert routine -----
syoki:
dbname$="treememo.db"
SQL.OPEN DB_Ptr, dbname$
tbname$ = "tree001"
c1$ = "bunrui"
c2$ = "kenmei"
c3$ = "picurl"
c4$ = "naiyou"
c5$ = "updymd"
time y$, m$, d$, h$, n$, s$
today$=y$+m$+d$+h$+n$+s$
bunrui1$="その他"
kenmei1$="このソフトについて"
picurl1$="http://zunko.jp/sozai/zunkot_s/zzm_a1zunko01.png"
naiyou1$="テスト用のデータです。中身はありません。\n2行目です。\n3行目です。"
updymd1$=today$
SQL.INSERT DB_Ptr, tbname$, c1$,bunrui1$, c2$,kenmei1$, c3$,picurl1$, c4$,naiyou1$, c5$,updymd1$
bunrui1$="その他"
kenmei1$="このソフトについて2"
picurl1$="http://zunko.jp/sozai/zunkot_s/zzm_a1zunko28.png"
naiyou1$="テスト用のデータです2。中身はありません。\n2行目です。\n3行目です。"
updymd1$=today$
SQL.INSERT DB_Ptr, tbname$, c1$,bunrui1$, c2$,kenmei1$, c3$,picurl1$, c4$,naiyou1$, c5$,updymd1$
bunrui1$="その他"
kenmei1$="このソフトについて3"
picurl1$="http://zunko.jp/sozai/zunkot_s/zzm_a1zunko07.png"
naiyou1$="テスト用のデータです3。中身はありません。\n2行目です。\n3行目です。"
updymd1$=today$
SQL.INSERT DB_Ptr, tbname$, c1$,bunrui1$, c2$,kenmei1$, c3$,picurl1$, c4$,naiyou1$, c5$,updymd1$
bunrui1$="その他2"
kenmei1$="このソフトについて4"
picurl1$="http://zunko.jp/sozai/zunkot_s/zzm_a1zunko12.png"
naiyou1$="テスト用のデータです4。中身はありません。\n2行目です。\n3行目です。"
updymd1$=today$
SQL.INSERT DB_Ptr, tbname$, c1$,bunrui1$, c2$,kenmei1$, c3$,picurl1$, c4$,naiyou1$, c5$,updymd1$
SQL.CLOSE DB_Ptr
end
6.テーブルへのデータ内容の確認
BASIC!のプログラムでテーブルからデータを全レコード読みだしてコンソール画面に表示します。プログラムのポイントは以下の通りです。
- SQL.OPEN命令でデータベースを開く。
DB名がパラメータ。DBが存在しているので、オープンしてそのポインターがセットされます。
- SQL.QUERY命令でデータ検索しカーソル番号を取得。
DBポインターとテーブル名と抽出列名(カンマ区切り)がパラメータ。データのカーソル番号がセットされます。カーソルは抽出した複数レコードが格納されるメモリー上の領域と私は理解しています。詳しくは以下のウィキペディアの記事をご確認ください。
補足:SQL.QUERY命令では省略可のパラメータとしてWhere句指定とorder指定ができます。
Sql.query <cursor_nvar>, <DB_pointer_nvar>, <table_name_sexp>, <columns_sexp> {, <where_sexp> {, <order_sexp>} }
Where句用変数とorder用変数ともにカンマでつないで複数の項目が指定可能ですがorderのみ指定したい場合にWhere句用変数を空にして指定することが必須になっています。
- カーソルに保持されているレコード数分だけSQL.NEXT命令でデータ取得。
カーソル番号がパラメータ。SQL.QUERY命令で指定した抽出列名の個個の項目が各文字型変数にセットされます。カーソルの最終レコードになる(=特殊変数xdoneがtrue)までコンソール画面に表示しながら実行します。
- SQL.CLOSE命令でデータベースを閉じる。
DBポインターがパラメータ。
REM Start of BASIC! Program
rem TBL print all
dbname$="treememo.db"
SQL.OPEN DB_Ptr, dbname$
tbname$ = "tree001"
c1$ = "bunrui"
c2$ = "kenmei"
c3$ = "picurl"
c4$ = "naiyou"
c5$ = "updymd"
title$ = "全件データ一覧"
Columns$ = "_id," + c1$ +"," + c2$ + "," +c3$ + "," + c4$ + "," + c5$
SQL.QUERY Cursor, DB_Ptr, tbname$, Columns$
PRINT title$
xdone = 0
DO
SQL.NEXT xdone,cursor,index$,v1$,v2$,v3$,v4$,v5$
if !xdone THEN
print "---- sta ----"
PRINT index$
print v1$
print v2$
print v3$
PRINT v4$
print v5$
print "---- end ----"
endif
UNTIL xdone
PRINT " "
SQL.CLOSE DB_Ptr
end
処理結果のBASIC!コンソール画面は以下の通りです。
7.まとめ
まとめると以下の通りです。
- AndroidではSQLiteというデータベースが標準で利用可能。
- BASIC!ではSQLiteを簡単に利用できる。
- BASIC!でSQLite利用する場合、項目は全て文字列項目である必要がある。
- BASIC!のSQLite命令はとても簡単。
レコードの更新、削除については本稿では記載していませんが同様の方法で利用できます。BASICでもこのくらいは出来るので気楽に試せると思います。