2013-08-01 52 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