Android:从SQLite数据库加载

时间:2011-09-27 22:17:37

标签: android sqlite loading save

所以我还在构建一个数据库来支持我的项目。有两种不同的东西需要保存:第一,某些玩家对象的属性值,第二,存储在java类中的简单值。

ATM我的问题在于加载一个玩家对象的值并将其写在相应的类中的过程。

现在让我们看一些代码:

下面你看到我想用来保存数据库中的值的方法。 这工作正常,但我刚刚意识到我还在传递contentValues对象的额外值为' ID'我确实设定了 - 并计划保持这种方式 - 作为自动增量。 任何想法如何相应地工作?

public void savePlayer(Player player[]) {


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


     playerValues.put("ID", i);
     playerValues.put("Name", player[i].getName());
     playerValues.put("HP", player[i].getHp());
     playerValues.put("Satisfaction", player[i].getsatisfaction());
     playerValues.put("Hygiene", player[i].isHygieneInt());
     playerValues.put("IsAlive", player[i].isAliveInt());

     }
     db.insert("playertable", null, playerValues);
}

好的,请坚持你的帽子,因为这看起来有点像意大利面 - 负载方法:

public void loadPlayer() {
    String[] namecolumn = { "Name" };
    String[] intcolumn = { "ID, HP, Satisfaction, Hygiene, IsAlive" };
    String[] namesToString = new String[4];


    for (int j = 0; j <= 3; j++) {
        Cursor playerCursorName = db.query("playertable", namecolumn, "ID="
                + j, null, null, null, null);
        namesToString = cursorToString(playerCursorName);
        Resource.playerArray[j].setName(namesToString[j]);
    }

    for (int i = 0; i < 3; i++) {
        int[] restToInt;
        Cursor playerCursorInt = db.query("playertable", intcolumn, "ID="
                + i, null, null, null, null);
        restToInt = cursorToInt(playerCursorInt, 4);
        Resource.playerArray[i].setHp(restToInt[i]);
        Resource.playerArray[i].setsatisfaction(restToInt[i]);
        Resource.playerArray[i].setHygieneInt(restToInt[i]);
        Resource.playerArray[i].setAliveInt(restToInt[i]);

    }
}

是的,我知道这看起来很难看,但让我解释一下:

因为有4个播放器对象,我计划通过使用ID作为标识符来迭代数据库条目,一次只获取一行,并在我想要的java类中写入该对象的名称和其他值在我的项目中管理它们。

注意:此处自动增量的问题与保存方法相同

另外,我在调用loadPlayer时得到了CursorIndexOutOfBoundsException,因为 正在请求索引-1 - 是不是数据库上的操作结果导致错误?

是的,非常重要,我会根据要求为您提供额外的代码,希望有人可以帮助我

1 个答案:

答案 0 :(得分:0)

你在这里稍微使用游标。

Cursor的要点是要求SQLite为您提取数据的艰苦工作,您的工作就是使用游标迭代返回的值。

首先,我会在这里更改查询以询问表中的所有值(并且可能会设置一些条件来约束你得到的内容),以确保你的光标包含你所有的值。

然后,我将使用一个while循环(在循环之前使用cursor.moveToPosition(-1))通过使用cursor.moveToNext()沿光标移动来遍历游标的值。

有关详细信息,请参阅API:

http://developer.android.com/reference/android/database/Cursor.html

关于自动增量问题,据我所知,您可以省略ID并使用不带该字段的db.insert(),数据库将为您提供ID。

你的加载方法不应该有同样的问题,因为加载时自动增量是没有意义的,你只需要回到数据库中的内容。