1

我尝试了许多不同的方法来做到这一点,但基本上当我从数据库中获取所有数据时,我想将它存储在一个数组中,但我不知道如何在从数据库中读取数据时遍历索引。这是我获取数据并将其添加到数组中的方式:

public void makeObjects(){
    i =0;
    db.open();
    for(int j = 0; j< amount; j++)
    {
        objarray.add(o); 
    }

    Cursor c = db.fetchAllNotes();
    if (c.moveToFirst())
    {

        do {      

            objarray.get(i).setid(c.getString(0));
            objarray.get(i).settitle(c.getString(1));
            objarray.get(i).setinfo(c.getString(2));
            objarray.get(i).setlat(c.getString(3));
            objarray.get(i).setlon(c.getString(4));
            objarray.get(i).setmc(c.getString(5));

            i++;
        } while (c.moveToNext());
    }



    db.close();

}

为了测试和简单,我的数据库中有两行,我有一个 for 循环,它向数组添加两个新索引,但是当我将数组的内容打印到 时logcat,我看到两个索引都有最后一个数据从数据库中读取,第二行两次。如何确保第一行进入索引 0,第二行进入索引 1?

4

3 回答 3

2

您需要为要引用的数组的每个元素创建一个新对象,而不是让它们都引用同一个对象。

于 2013-03-12T21:05:06.987 回答
2

我尝试了许多不同的方法来做到这一点,但基本上当我从数据库中获取所有数据时,我想将它存储在一个数组中

如何创建自己的对象来在您的数据库中显示表?该对象将具有一些属性,这些属性将显示表中的列。

这是如何将数据库中的每一行保存到对象列表中的算法:

  1. 将所有行提取到Cursor
  2. 循环Cursor并为每一行创建新对象并将其保存到对象列表中。

例子:

public class Foo {

   private int id;
   private String name;

   // getters and setters
}

现在实现方法:

public List<Foo> getAll() {
   List<Foo> foos = new ArrayList<Foo>();
   Foo member = null;
   Cursor c = null;
   try {
      c = db.rawQuery("Select * from Table", null);
      if (c.moveToFirst()) {
         do {
            member = new Foo();
            member.setId(c.getInt(c.getColumnIndex("id")));
            member.setName(c.getString(c.getColumnIndex("name")));
            foos.add(member);
         } while (c.moveToNext());
      }
      return foos;
   }
   finally {
      if (c != null) {
         c.close();
      }
   }
}
于 2013-03-12T21:17:39.993 回答
1

我希望这可以帮助你。此函数读取数据库并将行作为对象返回。这个函数写在一个扩展 SQLiteOpenHelper 的类中。

ParamsBMI getTemplate(String strPersonName)
{
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_BMI_PARAMS, new String[] { KEY_PERSON_NAME, KEY_GENDER_MALE, KEY_DOB_YEAR, KEY_DOB_MOY, KEY_DOB_DOM, KEY_HEIGHT_UNIT, KEY_WEIGHT_UNIT, KEY_HEIGHT_CMS, KEY_HEIGHT_FT, KEY_HEIGHT_INCHES, KEY_WEIGHT_KGS,
            KEY_WEIGHT_POUNDS }, KEY_PERSON_NAME + "=?", new String[] { strPersonName }, null, null, null, null);

    if (cursor != null)
        cursor.moveToFirst();

    ParamsBMI paramsBMI = new ParamsBMI();

    paramsBMI.setPersonName(cursor.getString(0));

    boolean bGenderMale = (cursor.getInt(1) == 1) ? true : false;
    paramsBMI.setGenderMale(bGenderMale);

    paramsBMI.setDOBYear(Integer.parseInt(cursor.getString(2)));
    paramsBMI.setDOBMonthOfYear(Integer.parseInt(cursor.getString(3)));
    paramsBMI.setDOBDayOfMonth(Integer.parseInt(cursor.getString(4)));

    paramsBMI.setHeightUnit(Integer.parseInt(cursor.getString(5)));
    paramsBMI.setWeightUnit(Integer.parseInt(cursor.getString(6)));

    paramsBMI.setHeightCms(Float.parseFloat(cursor.getString(7)));
    paramsBMI.setHeightFt(Float.parseFloat(cursor.getString(8)));
    paramsBMI.setHeightInches(Float.parseFloat(cursor.getString(9)));

    paramsBMI.setWeightKgs(Float.parseFloat(cursor.getString(10)));
    paramsBMI.setWeightPounds(Float.parseFloat(cursor.getString(11)));

    return paramsBMI;
}
于 2013-03-12T21:25:11.970 回答