我正在为Android开发我的第一个应用程序,我正在使用多个表来获取和插入数据。在开发过程中发现自己从表中获取数据只有两列STATS(_id, stat_name)
。我的问题是什么?我有一个包含10个按钮的活动,每个按钮与一个stat_name
相关联。当用户按下其中一个按钮时,应用程序“转到”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;
}
我的问题是,我知道应该只返回一个值,而且我仍然需要使用Cursor来执行此操作。此外,在我看来,它看起来复杂和耗时,写所有代码只是为了从一个表中获取一个id。我的应用程序中有9个表,每当我需要来自不同表的_id时,我必须编写类似的方法,例如,我只有名称。
有人可以告诉我是否有更简单的方法来做所有这些?请 :) 谢谢! :)
答案 0 :(得分: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);
答案 1 :(得分:7)
这很简单,但如果光标为空,Cursor.moveToFirst()
会返回false,因此您可以删除c.getCount()
调用,而只是说if(c.moveToFirst())
。这样可以省去一点点打字:)