先日,また血液検査をした。血圧の薬に加え,コレステロールの薬を飲み出したので,効き具合を測るためだ。前回は149,前々回は186あったLDLコレステロールが95になっていた。あっけないものである。186から146まで下げるのに食事制限やらウォーキングやら,いろいろ努力をしたつもりなのだが,朝一つ小さな薬を飲むだけで,146から95になってしまうのである。
「でも,今回はガンマGTPが悪いのですよ。飲み過ぎましたか」と先生。142という数値を見せられた。自己最高,いや最悪である。そう言えば,検査の前日も飲んでいたし・・・。「はい,やっちゃいました」と答えるしかなかった。
さて,前回(第323話「第323話 Xperiaに血圧を記録しよう」)の続きである。今回は測定した血圧の各値をSQLiteデータベースに記録する。Androidの場合,データベースを扱うにはデータベースヘルパークラスを作る。
-------------------------------------------------------------- public class DatabaseHelper extends SQLiteOpenHelper { private static final String DBNAME = "bpdata.db"; private static final int DBVERSION = 1; private static final String CREATE_TABLE_SQL = "create table bldpress" + "(rowid integer primary key autoincrement," + "max integer not null," + "min integer not null," + "pulse integer not null," + "date text not null," + "time text not null)"; public DatabaseHelper (Context context) { // DB作成 super(context,DBNAME,null,DBVERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_TABLE_SQL); } @Override public void onUpgrade(SQLiteDatabase db,int oldVersion, int newVersion) { // do nothing } } --------------------------------------------------------------
データベースヘルパークラスはSQLiteOpenHelperクラスを継承する。ヘルパークラスでやるべきことは血圧を記録するテーブルを作成することである。
第316話「Androidでデータベースを使う」に書いたように,SQLiteデータベースのデータ型は種類が少ないので,主キー,最高血圧,最低血圧,脈拍をInteger型に,日付,時刻はText型にする。
データベースヘルパークラスでは,コンストラクタでDBを作成し,DB作成時(onCreate)にdb.execSQL(CREATE_TABLE_SQL)でテーブルを作成する。
Activityクラスを継承するメインのクラスでは,onCreateでヘルパークラスのオブジェクトを生成し,記録ボタンを押されたときの処理をイベントリスナーに仕掛ける。
-------------------------------------------------------------- @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); dbhelper = new DatabaseHelper(this); Button btn = (Button) this.findViewById(R.id.Button01); btn.setOnClickListener(new OnClickListener(){ public void onClick(View v) { saveBldpress(); } }); edit01 = (EditText)this.findViewById(R.id.EditText01); edit02 = (EditText)this.findViewById(R.id.EditText02); edit03 = (EditText)this.findViewById(R.id.EditText03); edit04 = (EditText)this.findViewById(R.id.EditText04); edit05 = (EditText)this.findViewById(R.id.EditText05); } --------------------------------------------------------------
dbhelperやEditText オブジェクトであるedit01などは,このコードの上の部分で,private宣言している。
-------------------------------------------------------------- private void saveBldpress(){ SQLiteDatabase db = dbhelper.getWritableDatabase(); int int01 = Integer.parseInt(edit01.getText().toString()); int int02 = Integer.parseInt(edit02.getText().toString()); int int03 = Integer.parseInt(edit03.getText().toString()); String str04 = edit04.getText().toString(); String str05 = edit05.getText().toString(); ContentValues values = new ContentValues(); values.put("max", int01); values.put("min", int02); values.put("pulse", int03); values.put("date", str04); values.put("time", str05); db.insert("bldpress", null, values); db.close(); } --------------------------------------------------------------
仕掛ける処理の内容は,データベースを読み書き両用モードで開き,レコードを追加してデータベースを閉じるというものである。各EditTextの値をgetText()で取得し,ContentValuesオブジェクトに値を積んで,db.insertでレコードを追加している。
今回は省略しているが,本来は適宜,エラー処理を入れるべき個所である。