6

現在、Android用の最初のアプリを開発しています。データの取得と挿入に複数のテーブルを使用しています。開発中に、2つの列しかないテーブルからデータをフェッチしていることに気づきましたSTATS(_id, stat_name)。私の問題は何ですか?私は10個のボタンを持つアクティビティを持っており、すべてのボタンは1つと相関していますstat_name。ユーザーがボタンの1つを押すと、アプリケーションはSTATS正しいことをするためにテーブルに「移動」し_id、次にこれ_idを別のテーブルGAME_STATS(_id, PlayerId (fk), GameId(fk), StatsId(fk)(andmore))に入力します。STATS._id = GAME_STATS.StatsId基本的に、に対して同様の操作を行う必要がありますPlayerId

今、私はそれをこのようにやっています:

public String getStatId(String statName){
    String statId = "Error";
    Cursor c = mDb.query(STAT_TABLE, new String[] {AbstractDbAdapter.STAT_ID, AbstractDbAdapter.STAT_NAME}, AbstractDbAdapter.STAT_NAME+ " = " +statName, null, null, null, null);
    int count = c.getCount();
    if(count == 1){
        c.moveToFirst();
        statId = c.getString(c.getColumnIndex(AbstractDbAdapter.STAT_ID));
    }
    c.close();
    mDb.close();
    Log.d("FootballApp","StatId =" +statId);
    return statId;      
}

私の問題は、返される値は1つだけである必要があることを知っていることです。そのためには、カーソルを使用する必要があります。また、私の意見では、1つのテーブルから1つのIDを取得するためだけに、すべてのコードを記述するのは複雑で時間のかかる方法のように見えます。アプリケーションに9つのテーブルがあり、たとえば名前しかない場合、別のテーブルから_idが必要になるたびに、同様のメソッドを作成する必要があります。

それをすべて行うもっと簡単な方法があるかどうか誰かに教えてもらえますか?お願いします:)ありがとう!:)

4

2 に答える 2

9

これほど単純なことはないと思います。ただし、コードを再利用できるように、メソッドをより汎用的にすることができます。

public String getFromDb(String tableName, String select, String selectBy, String selectName){
    String selection = "Error";
    Cursor c = mDb.query(tableName, new String[] {select}, selectBy + "=" + selectName, null, null, null, null);
    if(c.getCount() == 1){
        c.moveToFirst();
        selection = c.getString(c.getColumnIndex(select));
    }
    c.close();
    mDb.close();
    Log.d("FootballApp", select + "=" + selection);
    return id;      
}

使用例:

int statID = getFromDb(STAT_TABLE, AbstractDbAdapter.STAT_ID, AbstractDbAdapter.STAT_NAME, statName);
于 2012-07-14T01:31:14.937 に答える
8

これは簡単なことですがCursor.moveToFirst()、カーソルが空の場合は false を返すので、呼び出しを切り取って代わりc.getCount()に言うことができますif(c.moveToFirst())。これにより、タイピングが少し節約されます:)

于 2012-07-14T01:33:10.097 に答える