0

私のアプリケーションには複数のSQLiteテーブルがあります(異なるフィールドを持つ約20)。これは、Adapterクラスを使用して作成しました(ここでは、1つのクラスのゲームについて説明しました。たとえば、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>();
}

主なモトはデータに基づいて新しいインスタンスを作成するため、テーブルタイプを確認して新しいインスタンスを作成し、arrayList簡単に使用できます。

于 2012-07-06T07:58:12.987 に答える