2013-08-01 49 views
1

我有八列數據庫表,具有以下字段:數據庫到光標,光標到數組列表和數組列表到名稱值對的字符串。

|_id|flag|HVID|Vname|Vdate|Vtime|Vcost|Vmedicine| 

我查詢這個數據庫中,提取屬於某種「HVID」的所有記錄:

public Cursor fetchAllVac(String ID) { 

     String Key = ID; 
     Cursor mCursor = mDb.query(DATABASE_TABLE1, new String[] { IDx, FLAG, 
       HVID1, Vname1, VDate1, Vtime1, Vcost1, Vmedicine1 }, "HVID=?", 
       new String[] { Key }, null, null, null, null); 
     if (mCursor != null) { 
      mCursor.moveToFirst(); 
     } 
     return mCursor; 
    } 

而且在活動中,我從遊標讀取值,並將其存儲在一個數組列表:

public void Vacforshare() { 
    String B = null; 
    ArrayList<String> mArrayList = new ArrayList<String>(); 
    mCursor = DBHelper.fetchAllVac(IDB); 
    if (mCursor.moveToFirst()) { 
     do { 
      try { 
       mArrayList.add(mCursor.getString(mCursor 
         .getColumnIndex("_id"))); 
       mArrayList.add(mCursor.getString(mCursor 
         .getColumnIndex("flag"))); 
       mArrayList.add(mCursor.getString(mCursor 
         .getColumnIndex("HVID"))); 
       mArrayList.add(mCursor.getString(mCursor 
         .getColumnIndex("Vname"))); 
       mArrayList.add(mCursor.getString(mCursor 
         .getColumnIndex("Vdate"))); 
       mArrayList.add(mCursor.getString(mCursor 
         .getColumnIndex("Vtime"))); 
       mArrayList.add(mCursor.getString(mCursor 
         .getColumnIndex("Vcost"))); 
       mArrayList.add(mCursor.getString(mCursor 
         .getColumnIndex("Vmedicine"))); 
      } catch (Exception h) { 

      } 

     } while (mCursor.moveToNext()); 

    } 
    for (int i = 0; i < mArrayList.size(); i++) { 
     String G = (mArrayList.get(i)); 
     B = B + G; 
    } 
    System.out.println("" + B); 

} 

我所得到的B是多餘的(所有行)STR值(我的記錄可以是多行)我想將這些值分隔成名稱 - 值對,我很困惑如何實現這一點。

回答

3

可以引進,將有值列表的一個記錄只有像下面的一個新的類:

public class Record { 
    List<String> values = new ArrayList<String>(); 

    public List<String> getValues() { 
     return values; 
    } 
} 

然後在循環填充在記錄列表:

ArrayList<Record> mArrayList = new ArrayList<Record>(); 
do { 
    try { 
     Record record = new Record(); 
     List<String> values = record.getValues(); 

     values.add(mCursor.getString(mCursor.getColumnIndex("_id"))); 
     ... 
     mArrayList.add(record); 
    } catch (Exception h) { 

    } 
} 

現在您可以遍歷每個記錄的字段名稱和值以創建所需的輸出:

String[] names = new String[] {"_id", "flag", ....}; 
for (int i = 0; i < mArrayList.size(); i++) { 
    Record record = mArrayList.get(i); 

    String current = ""; 
    List<String> values = record.getValues(); 
    for (int j = 0; j < values.size(); j++) { 
     String fieldName = names[j]; 
     String s = values.get(j); 
     current += " " + fieldName + "=" + s; 
    } 
    B = B + "[" + current.trim() + "]"; 
} 
System.out.println(B); // will print: [_id=value1 flag=value2 ...][_id=value1 flag=value2 ...] etc 
+0

給我在類型ArrayList 的方法add(Record)不適用於參數(字符串) – user2613996

+0

@ user2613996您正在使用字符串參數調用'add()'。你應該用一個'Record'來調用它。請檢查第一個代碼示例。 –

+0

工程就像一個魅力!謝啦! – user2613996

3
ArrayList<ArrayList<NameValuePair>> table = new ArrayList<ArrayList<NameValuePair>>(); 
if (mCursor.moveToFirst()) { 
     do { 
      ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
      try { 
       nameValuePairs.add(new BasicNameValuePair("_id",mCursor.getString(mCursor.getColumnIndex("_id")))); 
      //do this for the rest columns... 
      //... 
      //... 

      table.add(nameValuePairs); 

      } catch (Exception h) { 

      } 

     } while (mCursor.moveToNext()); 

table你將有行作爲ArrayList從後NameValuePair小號

,你可以從一個行獲得的值一樣

ArrayList<NameValuePair> row = table.get(0); 
NameValuePair column = row.get(0); 
String columnName = column.getName(); 
String columnValue = column.getValue(); 
+0

這是一種更簡單的方法出來了!謝謝! – user2613996

+0

Table數組列表有什麼作用? – user2613996

+0

ArrayList 表示表中的一行。 '表'可以容納行。 – mihail

1

可以使乙包含HashMap的ArrayList並將這些對存儲在B中。當您從循環中的mCursor中提取它們時,將這些鍵放在地圖中。如果B必須是字符串,請使用JSON格式。

1

這並不完全清楚你想要做什麼。如果我理解你的問題是正確的,你會得到一個像這樣的字符串 「Vname | Vdate | Vtime | Vcost | VmedicineVname | Vdate | Vtime | Vcost | Vmedicine」

但是你希望每個字符串都有一個行,像這樣:

  1. 字符串 「VNAME | Vdate | VTIME | Vcost | Vmedicine」
  2. 字符串 「VNAME | Vdate | VTIME | Vcost | Vmedicine」

如果這是你想要,你可以將每一行傳遞給一個ArrayList,並將該ArrayList傳遞給一個ArrayList,這個l ooks與此類似:

 private ArrayList<ArrayList<String>> doubleArray = new ArrayList<ArrayList<String>>(); 

,然後當你得到的值從DB:

 ArrayList<String> mArrayList = new ArrayList<String>(); 
     mArrayList.add(mCursor.getString(mCursor 
        .getColumnIndex("_id"))); 
      mArrayList.add(mCursor.getString(mCursor 
        .getColumnIndex("flag"))); 
      mArrayList.add(mCursor.getString(mCursor 
        .getColumnIndex("HVID"))); 
      mArrayList.add(mCursor.getString(mCursor 
        .getColumnIndex("Vname"))); 
      mArrayList.add(mCursor.getString(mCursor 
        .getColumnIndex("Vdate"))); 
      mArrayList.add(mCursor.getString(mCursor 
        .getColumnIndex("Vtime"))); 
      mArrayList.add(mCursor.getString(mCursor 
        .getColumnIndex("Vcost"))); 
      mArrayList.add(mCursor.getString(mCursor 
        .getColumnIndex("Vmedicine"))); 

      doubleArray.add(mArrayList); 

這樣你就可以得到完全的一行爲:

  for(int i=0;i<doubleArray.size();i++){ 

       String a = doubleArray.get(i) 
      // now pass the String wherever You want 
     } 

但就像我說,我不知道你的解釋是否這是你想要的......

+0

沒有這些是我的coulmn名稱,但是我想爲每行分開的字符串! – user2613996

+0

確定這是你的列名,我知道,但正如我描述的,你應該從每一列/行的值到一個數組。 – Opiatefuchs

+0

我會回到這裏! :)感謝隊友的指導! – user2613996