如何从android中的不同表中获取数据?
问题描述:
我的应用程序有多个SQLite表(大约20个不同的字段)。我使用Adapter类创建了它(这里我刚刚提到了一个类游戏,就像我有20个)。如何从android中的不同表中获取数据?
public class MyDbAdapter {
private SQLiteDatabase mDb;
private static MyDatabaseManager mDbManager;
Context ctx;
public MyDbAdapter(Context context) {
this.ctx = context;
mDbManager = new MyDatabaseManager(context);
mDb = mDbManager.getWritableDatabase();
}
public static final class GameColumns implements BaseColumns {
public static final String TABLE = "game";
public static final String IMEI = "imei";
public static final String LAST_UPDATE = "lastupdate";
public static final String NICKNAME = "nickname";
}
private static class MyDatabaseManager extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "dbname";
private static final int DATABASE_VERSION = 8;
private MyDatabaseManager(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
createGameTable(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "+GameColumns.TABLE);
onCreate(db);
}
@SuppressWarnings("unused")
private void dropDatabase(SQLiteDatabase db) {
db.execSQL("DROP TABLE IF EXISTS " + GameColumns.TABLE);
}
private void createGameTable(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + GameColumns.TABLE + " ("
+ GameColumns._ID + " INTEGER PRIMARY KEY,"
+ GameColumns.IMEI + " TEXT,"
+ GameColumns.LAST_UPDATE + " TEXT,"
+ GameColumns.NICKNAME + " TEXT);");
}
}
}
数据从每个表中获取使用下面的代码。该函数返回Cursor对象。
public Cursor getRecords(String tableName){
Cursor cursor = mDb.query(tableName, null, null, null, null, null, null);
return cursor;
}
我需要将Cursor对象转换为列表或字符串。为此我们需要遍历游标Object。我的问题是,每个表都有不同的字段,所以我需要在不同的方法中迭代每个游标对象。这怎么可以用单一方法来完成? 有没有任何直接的方法将光标转换为字符串?
答
可以使用HashMap
像...
ArrayList<HashMap<String, String>> items = new ArrayList<HashMap<String, String>>();
int col_count = cursor.getColumnCount();
while (cursor.moveToNext()) {
HashMap<String, String> currentItem = new HashMap<String, String>();
for (int i = 0; i < col_count; i++)
{
String col_name = cursor.getColumnName(i);
currentItem.put(col_name, cursor.getString(i));
}
items.add(currentItem);
}
cursor.close();
答
您可以将包含表列名称的String
数组作为参数传递给您的getRecords()
方法。然后只需遍历Cursor
获取每列的值。希望这可以帮助。
答
尝试这样的事:
ArrayList<Object> attayList;
if(tableName.equals(table1)){
arrayList=new ArrayList<Table1ClassType>();
}
if(tableName.equals(table2){
arrayList = new ArrayList<Table2ClassType>();
}
主要摩托是基于数据创建新实例,所以你可以检查表类型&创建新的实例,然后轻松使用arrayList
。
@Mohsin:谢谢它的工作。 – pushpa 2012-07-06 08:01:28
+1 @Mohism !!! :) – 2012-07-06 08:21:04
同样的道理,我们如何使用单一方法插入? – pushpa 2012-07-06 10:32:25