另一种独立于数据库访问多个列的方法?

时间:2013-08-07 13:42:12

标签: android android-sqlite

我的应用程序在同一个表下的数据库中存储了三个项目:“name”,“email”,“mobile”。我想独立访问它们,以便我可以在各自的TEXTVIEW下显示它们的值。我独立访问它们,因为如果我通过一个函数访问它们,我将无法显示值

目前,我必须为每一列编写一个函数,以便从中获取信息。

获取“电子邮件”的示例

public String getUserEmail(String mobile) {

        String[] columns = new String[] {USER_EMAIL};
        Cursor c = MainDataBase.query(REG_INFO_TABLE, columns, USER_MOBILE_NUMBER + "=" + mobile, null, null, null, null);

        String result = "";

        int email = c.getColumnIndex(USER_EMAIL);



        while(c.moveToNext()) {

            result = result + c.getString(email);

        }
        return result;

    }

所以,如果我需要“名称”,我将不得不编写另一个类似上面的函数来获取它。

现在,如果我需要访问50个这样的列,我将不得不制作50个听起来不太好的功能。有没有其他方法可以做到这一点?可以在这里使用数组吗?

2 个答案:

答案 0 :(得分:1)

您应该考虑创建一个User类来保存每个User的数据。然后,您更改getAllRegInfo()以返回User个对象。这样做的好处是,您应用的其余部分只能访问User,并且不知道数据来自何处。写

也更具表现力
User user = getAllRegInfo();
String name = user.getName();

而不是

String[] user = getAllRegInfo();
String name = user[0];

此外,User类可以包含任何类型的字段,而不是强制将所有数据转换为String

答案 1 :(得分:0)

好的,所以我找到了另一种选择。它只使用数组。

以下是代码:

public String[] getAllRegInfo() {

        String[] columns = new String[] {USER_NAME, USER_EMAIL, USER_MOBILE_NUMBER};
        Cursor c = MainDataBase.query(REG_INFO_TABLE, columns, null, null, null, null, null);

        String[] result = new String[3];

        for(int j=0; j<3; j++) {

            result[j] = "";

        }

        int[] column = new int[3];

        column[0] = c.getColumnIndex(USER_NAME);
        column[1] = c.getColumnIndex(USER_EMAIL);
        column[2] = c.getColumnIndex(USER_MOBILE_NUMBER);

        while(c.moveToNext()) {

            for(int i = 0; i<3; ++i) {

                result[i] = c.getString(column[i]);

            }

        }

        return result;
    }

当然,必须手动将数组索引设置为列。像这样:

            column[0] = c.getColumnIndex(USER_NAME);
            column[1] = c.getColumnIndex(USER_EMAIL);
            column[2] = c.getColumnIndex(USER_MOBILE_NUMBER);

解决方案似乎工作正常,但我不确定它的可扩展性。