如何从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(); 
+1

@Mohsin:谢谢它的工作。 – pushpa 2012-07-06 08:01:28

+0

+1 @Mohism !!! :) – 2012-07-06 08:21:04

+0

同样的道理,我们如何使用单一方法插入? – pushpa 2012-07-06 10:32:25

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

尝试这样的事:

ArrayList<Object> attayList; 

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

主要摩托是基于数据创建新实例,所以你可以检查表类型&创建新的实例,然后轻松使用arrayList