全然どうでもいいんだがDAOって響きなんだかマヌケなかんじがしません?だお。
/src/com.example.bizcart/db/BizCardDao.java
public class BizCardDao {
	//インスタンス変数
	private DatabaseOpenHelper helper = null;
	//コンストラクタ
	public BizCardDao(Context context) {
		helper = new DatabaseOpenHelper(context);
	}
	//レコードを保存する
	public BizCard save(BizCard bizCard){
		SQLiteDatabase db = helper.getWritableDatabase();
		BizCard result = null;
		try {
			//保存するContentValuesオブジェクトを作成
            ContentValues values = new ContentValues();
            values.put( BizCard.COLUMN_PERSON_NAME,       bizCard.getPersonName());
            values.put( BizCard.COLUMN_COMPANY_NAME,      bizCard.getCompanyName());
            values.put( BizCard.COLUMN_ORGANIZATION_NAME, bizCard.getOrganizationName());
            values.put( BizCard.COLUMN_POSITION_NAME,     bizCard.getPositionName());
            values.put( BizCard.COLUMN_ZIP_CODE,          bizCard.getZipCode());
            values.put( BizCard.COLUMN_ADDRESS,           bizCard.getAddress());
            values.put( BizCard.COLUMN_TEL1,              bizCard.getTel1());
            values.put( BizCard.COLUMN_TEL2,              bizCard.getTel2());
            values.put( BizCard.COLUMN_MAIL,              bizCard.getMail());
            Long rowId = bizCard.getRowid();
            //保存
            if( rowId == null){
                rowId = db.insert( BizCard.TABLE_NAME, null, values);
            }
            else{
                db.update( BizCard.TABLE_NAME, values, BizCard.COLUMN_ID + "=?", new String[]{ String.valueOf( rowId)});
            }
            //保存した中身を取得
            result = load( rowId);
        } finally {
            db.close();
        }
		return result;
	}
	
    // 該当IDのレコードを取得
    public BizCard load(Long rowId) {
        SQLiteDatabase db = helper.getReadableDatabase();
        BizCard bizCard = null;
        try {
            Cursor cursor = db.query( BizCard.TABLE_NAME, null, BizCard.COLUMN_ID + "=?", new String[]{ String.valueOf( rowId)}, null, null, null);
            cursor.moveToFirst();
            bizCard = getBizCard( cursor);
        } finally {
            db.close();
        }
        return bizCard;
    }
    // 全レコードを取得
    public List
見知らぬコードが一気に増えました。順に見てみます。
save()でレコードを保存します。
SQLiteOpenHelperからSQLiteDatabaseオブジェクトを得るメソッドはgetReadableDatabase()とgetWritableDatabase()ふたつがありますが、前者は読み取り専用、後者は読み書きどちらも可能ということらしいです。
万一のことを考えて保存するメソッド以外はgetReadableDatabase()を呼んどけばいいということですかね。
ContentValuesはDBに保存する値を突っ込んでおく連想配列みたいなクラスです。
ContentValues.put(key, value)でキーと値のペアを注ぎ込んで、最後にinsert()なりupdate()なりの引数として渡します。
保存するメソッドはこんな形。
SQLiteDatabase.insert(String table, String nullColumnHack, ContentValues values)
SQLiteDatabase.update(String table, ContentValues values, String whereClause, String whereArgs[])
nullColumnHackって何だ?
updateの第三引数はwhere句、第四引数はバインドする値の配列です。
PHP的に言うとupdate($table, $values, 'hoge = ? AND fuga = ?', array( 'foo', 'bar' ) )ですかね。
保存に成功した場合は、引数のBizCardは使用せず保存したデータをload()で読み込んでいます。
そのload()は引数のIDのレコードを取得します。
SQLiteDatabase.query(String table, String columns[], String selection, String selectionArgs[], String groupBy, String having, String orderBy)
第二引数は取得するカラム名を並べるようです。
nullにすると全カラム取ってきてくれるみたい。
返り値はContentValuesでいいのに何故かCursorとかいう形で返ってくるので、BizCard形式に戻して返します。
このgetBizCard()がCursor.getString(1)とか書いてあるんですが今時カラム名じゃなくて番号かよ。こええよ。
Cursor.getColumn(BizCard.COLUMN_PERSON_NAME)とか無いの?
list()は保存されている全エントリをBizCardのListに入れて返します。
中身はload()とほぼ同じです。
while文中にあるCursor.isAfterLast()は最終行よりさらに先にいるかという意味のようです。
whileが最終行までくるくると回り続け、結果として全ての行を取得して返します。
これ、limitが設定されていないのでデータが増えていくと危険なことになりそうです。
delete()はそのまま削除の意味です。
サンプルでは引数がBizCardですがint BizCard.COLUMN_IDで十分な気が。
こんなかんじでデータベースを操作するクラスが完成しました。
Androidの記事
 
