0

我的应用程序有多个 SQLite 表(大约 20 个不同的字段)。这是我使用适配器类创建的(这里我刚刚提到了一个类游戏,就像我有 20 个)。

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;
}

我需要将光标对象转换为列表或字符串。为此,我们需要迭代游标对象。我的问题是,每个表都有不同的字段,所以我需要在单独的方法中迭代每个游标对象。如何使用单一方法来完成?有没有直接将光标转换为字符串的方法?

4

3 回答 3

1

你可以使用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();
于 2012-07-06T07:50:16.313 回答
0

您可以将String包含表列名称的数组作为参数传递给您的getRecords()方法。然后只需迭代Cursor获取每列的值。希望这可以帮助。

于 2012-07-06T07:47:34.823 回答
0

尝试这样的事情:

ArrayList<Object> attayList;

if(tableName.equals(table1)){
arrayList=new ArrayList<Table1ClassType>();
}
if(tableName.equals(table2){
arrayList = new ArrayList<Table2ClassType>();
}

主要 moto 是根据数据创建新实例,因此您可以检查表类型并创建新实例,然后arrayList轻松使用。

于 2012-07-06T07:58:12.987 回答