2012-07-14 18 views
5

私は今、アンドロイド用の私のアプリを開発しています、私は取得し、データを挿入するために複数のテーブルを使用しています。開発中に自分自身がテーブルからデータを取得していることがわかりましたSTATS(_id, stat_name)。私の問題は何ですか?私は10個のボタンでアクティビティを持っており、すべてのボタンはstat_nameと相関しています。ユーザがボタンの1つを押すと、アプリケーションはSTATSテーブルに「_id」を取得してから_idに「GAME_STATS(_id, PlayerId (fk), GameId(fk), StatsId(fk)(andmore))」と入力してに、PlayerIdと同様の操作を行う必要があります。今 androidのSQLiteから単一の値を取得する

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

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つのIDを取得するために、すべてのコードを記述するのは複雑で時間がかかります。私のアプリケーションには9つのテーブルがあり、たとえば、名前だけを持つときに、別のテーブルから_idが必要なたびに、同様のメソッドを書く必要があります。

もっと簡単な方法があれば教えてもらえますか?してください:) ありがとう! :)

答えて

7

私はそれがはるかに簡単ではないと思う。

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); 
+0

を入力するのは少しの節約になります ' ' selectBy + "=" + selectName、 'selectBy + "=?" とnull'なので 、新しいString [] {selectName}を置き換えます – Afilu

7

それを取得と同じくらい簡単ですが、カーソルが空の場合はfalseをCursor.moveToFirst()返しますが、コードを再利用することができますので、しかし、あなたは方法がより一般的にすることができますc.getCount()コールを切断して代わりにif(c.moveToFirst())と言うことができます。それはあなたがより安全なコードについて:)

関連する問題