如何将SQLite表行保存到数组中?

时间:2013-03-12 21:01:26

标签: java android sqlite

我已经尝试了很多不同的方法来实现这一点,但基本上当我从数据库中获取所有数据时我想将它存储在一个数组中,但我不知道如何在读取数据时迭代索引数据库。以下是我获取数据并将其添加到数组的方法:

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?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

  

我尝试了许多不同的方法,但基本上我得到了   我希望将数据库中的所有数据存储在数组中

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

以下是算法如何将每行从db保存到对象列表中:

  1. 将所有行提取到Cursor
  2. 遍历Cursor并为每一行创建新对象并保存 进入对象列表。
  3. 实施例

    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();
          }
       }
    }
    

答案 2 :(得分: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;
}