Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将SQLite表行保存到数组中?_Java_Android_Sqlite - Fatal编程技术网

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

Java 如何将SQLite表行保存到数组中?,java,android,sqlite,Java,Android,Sqlite,我尝试了许多不同的方法来实现这一点,但基本上,当我从数据库中获取所有数据时,我希望将其存储在一个数组中,但我不知道如何在从数据库读取数据时遍历索引。下面是我获取数据并将其添加到阵列的方式: public void makeObjects(){ i =0; db.open(); for(int j = 0; j< amount; j++) { objarray.add(o); } Cursor c = db.fetchAll

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

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

}
public void makeObjects(){
i=0;
db.open();
对于(int j=0;j

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

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

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

我尝试了很多不同的方法来做这件事,但基本上当我 我希望将数据库中的所有数据存储在一个数组中

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

下面是如何将db中的每一行保存到对象列表中的算法:

  • 将所有行提取到
    光标中
  • 循环浏览
    光标
    ,并为每一行创建新对象并保存它 进入对象列表
  • 例子: 现在,方法的实现:

    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();
          }
       }
    }
    
    public List getAll(){
    List foos=new ArrayList();
    Foo成员=null;
    光标c=null;
    试一试{
    c=db.rawQuery(“从表中选择*”,空);
    if(c.moveToFirst()){
    做{
    成员=新的Foo();
    setId(c.getInt(c.getColumnIndex(“id”));
    setName(c.getString(c.getColumnIndex(“name”));
    foos.add(成员);
    }而(c.moveToNext());
    }
    返回foos;
    }
    最后{
    如果(c!=null){
    c、 close();
    }
    }
    }
    
    我尝试了很多不同的方法来做这件事,但基本上当我 我希望将数据库中的所有数据存储在一个数组中

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

    下面是如何将db中的每一行保存到对象列表中的算法:

  • 将所有行提取到
    光标中
  • 循环浏览
    光标
    ,并为每一行创建新对象并保存它 进入对象列表
  • 例子: 现在,方法的实现:

    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();
          }
       }
    }
    
    public List getAll(){
    List foos=new ArrayList();
    Foo成员=null;
    光标c=null;
    试一试{
    c=db.rawQuery(“从表中选择*”,空);
    if(c.moveToFirst()){
    做{
    成员=新的Foo();
    setId(c.getInt(c.getColumnIndex(“id”));
    setName(c.getString(c.getColumnIndex(“name”));
    foos.add(成员);
    }而(c.moveToNext());
    }
    返回foos;
    }
    最后{
    如果(c!=null){
    c、 close();
    }
    }
    }
    
    我希望这会对您有所帮助。此函数读取数据库并将行作为对象返回。此函数在扩展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;
    }
    

    我希望这对你有帮助。此函数读取数据库并将行作为对象返回。此函数在扩展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;
    }
    

    这很有道理,你能告诉我怎么做吗?这可能需要我很长时间才能弄清楚。非常感谢。如何初始化
    o
    ?可能,初始化的右侧是您应该在第一个循环中使用的。类似于
    objarray.add(newwhere())你是对的,一直以来我都缺少这段代码,我尝试了所有的方法,但没有(感谢你注意到这一点并帮助我解决这一问题,现在一切都正常了,一旦它允许我,我会接受这个答案!:)这确实很有道理,你能告诉我怎么做吗?这可能需要我很长时间才能弄清楚。非常感谢。如何初始化
    o
    ?可能,初始化的右侧是您应该在第一个循环中使用的。类似于
    objarray.add(newwhere())你是对的,一直以来我都缺少这段代码,我尝试了所有的方法,但没有(谢谢你注意到这一点并帮助我解决这个问题,现在一切都正常了,一旦它允许我,我会接受这个答案!:)嘿,伙计!!谢谢你的回答,我成功地修复了它,我一直缺少一段代码!!:(:)回答得很好,谢谢,我会保留这段代码的!嘿,伙计!!谢谢你的回答,我成功地修复了它,我一直缺少一段代码!!:(:)回答得很好,谢谢,我会保留这段代码的!