先日,また血液検査をした。血圧の薬に加え,コレステロールの薬を飲み出したので,効き具合を測るためだ。前回は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でレコードを追加している。

 今回は省略しているが,本来は適宜,エラー処理を入れるべき個所である。