在SQlite数据库中返回5列的所有行

时间:2016-04-06 18:36:11

标签: android

我使用以下代码仅获取数组上数据库的一列并显示它

public ArrayList<String> dbtoArr() {
        ArrayList<String> arr = new ArrayList<>();
        SQLiteDatabase db = getReadableDatabase();
        String q = "SELECT * FROM persons WHERE 1";
        Cursor c = db.rawQuery(q, null);
        c.moveToFirst();
        while (!c.isAfterLast()) {
            if (c.getString(c.getColumnIndex("name")) != null) {
                arr.add(c.getString(c.getColumnIndex("name")));
            }
            c.moveToNext();
        }
        db.close();
        return arr;
    }

我想检索所有列的所有行

我不知道android中可以携带此类数据的任何对象

如果我有5个或更多列,我将如何携带它们?

提前感谢。

2 个答案:

答案 0 :(得分:0)

创建一个类,其中声明的每个成员变量都对应于您的列。我们将其命名为MyClass。 然后,您需要将值设置为数据库方法中的成员变量,并返回创建的对象列表。

   public ArrayList<MyClass> dbtoArr() {
        ArrayList<MyClass> arr = new ArrayList<>();
        SQLiteDatabase db = getReadableDatabase();
        String q = "SELECT * FROM persons WHERE 1";
        Cursor c = db.rawQuery(q, null);
        c.moveToFirst();
        while (!c.isAfterLast()) {
            if (c.getString(c.getColumnIndex("name")) != null) {
                arr.add(new MyClass().setName(c.getString(c.getColumnIndex("name"))));
            }
            c.moveToNext();
        }
        db.close();
        return arr;
    }

答案 1 :(得分:0)

你可以做的是创建一个POJO(Plain Old Java Object)类,并且有一个方法可以传入Cursor并为每个属性赋值。

这样的事情:

class Person {
    String name;
    int age;
    ...
    public Person(Cursor c) {
        name = c.getString(c.getColumnIndex("name"));
        age = c.getInt(c.getColumnIndex("age"));        
        ...
    }
}

然后,不是拥有一个字符串的ArrayList,而是拥有一个人员的ArrayList

ArrayList<Person> persons = new ArrayList<>();
...
while (!c.isAfterLast()) {
    Person p = new Person(c);
    persons.add(p);
}