2017-01-08 6 views
0

greenDAOで動作するアンドロイドアプリを持っていて、RecyclerViewで表示するように、すべてのデータベース(MySQLではshow databasesのようなもの)を取得しようとしています。アイテムを選択し、データベース内のすべてのエンティティを取得し、別のフラグメントに表示し、次にエンティティを選択してすべてのデータを取得し、別のフラグメントに表示します。GreenDAO - すべてのデータベースとエンティティを取得

greenDAOでその情報を取得する方法はありますか?それを得るもう1つの方法は?(sqliteかもしれませんか?)または唯一の方法は、データベースとエンティティの観点からすでに存在するものを表示し、それに応じてデータベースとエンティティの数がどのように変化するかです。

答えて

0

は、オプション3の賢明なバージョン(そこに覚えているものを表示し、データベースとエンティティの数がいつ、どのように変化するかを表示します)を使って、すべてのデータベースとエンティティを初期化するクラスを作成しました(DaoMaster.DevOpenHelper、 SQLiteDatabaseとentityNameDao)、そこに、私はデータベース名を取得し、すべてのエンティティのリストを作成し、アクティビティに渡し、そこから、Daoでエンティティからのデータのリストを取得します。私はそれを作っていた方法ではありませんが、少なくともそれは更新するために混乱ではありません。

編集:しばらくすると、すべてのデータベースを除くすべてのデータをSqliteで取得できることがわかりました。あなたがSELECT name FROM sqlite_master WHERE type='table'を照会することができますテーブルまたはエンティティの場合、今あなたが各テーブルを照会することができ、すべてのテーブル名と、データを取得するためには、まずCursor.getColumnNames();でatributesを取得し、getColumnIndex();でそれらを取得する必要があり、ここで少し例

ArrayList<String> arrTblNames = new ArrayList<>(); 
    List<List<String>> data = new ArrayList<>(); 

    Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null); 

    if (c.moveToFirst()) { 
     while (!c.isAfterLast()) { 
      arrTblNames.add(c.getString(c.getColumnIndex("name"))); 
      c.moveToNext(); 
     } 
    } 
    for(int i=0; i<=arrTblNames.size()-1;i++){ 
     Cursor dbCursor = db.query(arrTblNames.get(i), null, null, null, null, null, null); 
     String[] columnNames = dbCursor.getColumnNames(); 
     Cursor c2 = db.query(arrTblNames.get(i),columnNames,null,null,null,null,null); 
     if (c2.moveToFirst()) { 
      while (!c2.isAfterLast()) { 
       data.add(new ArrayList<String>()); 
       for(int j=0; j<=columnNames.length-1;j++){ 
        data.get(i).add(c2.getString(c2.getColumnIndex(columnNames[j]))); 
       } 
       c2.moveToNext(); 
      } 
     } 
    } 
です
関連する問題