0

我的 sqlitedatabase 已经被这个问题困扰了好几天了。

我的插入方法有效,我在它运行后中断并检查数据库现在是否包含行(在它为空之前),通过查询整个数据库,它有效。这是返回生成的puzzleId 的插入方法。

    public int savePuzzleToEdit(ContentValues puzzle, Integer puzzleId) {
      Integer id = puzzle.getAsInteger(General.ID);
      if (id == 0 && puzzleId == null) {
        puzzle.remove(General.ID);
        puzzleId = (int) ourDatabase.insert(PUZZLE_TABLE, null, puzzle);
      }else {
        ....
      }
    return puzzleId

然而,查询方法不返回任何结果,即游标为空。

public ArrayList<ContentValues> getCreatedPuzzles(int puzzleId) {
  Cursor c = ourDatabase.query(PUZZLE_TABLE, null, "_id = " + puzzleId, null, null, null, null, null);
        while (c.moveToNext()) { // Generate return list ...}

我尝试在插入之后和查询之前进行中断,以查看数据库中是否确实存在行。但是,我无法通过按 id 选择进行查询。但是,我可以通过表中的其他字段查询并获得正确的行,因此它必须是有错误的 _id 字段。

我还尝试使用 rawQuery 方法,该方法在查询整个数据库或除 id 之外的任何其他字段时也可以使用。

这是创建语句:

private static final String PUZZLE_TABLE_CREATE =
            "CREATE TABLE puzzle ( _id INTEGER, name varchar(45), category " +
                    "varchar(25), publishdate DATE, rating INT, timesplayed INT, numberOfQuestions INT);";

据我了解,id 必须是 INTEGER 才能在插入时进行 auto_increment,我相信这是有效的,因为 insert 方法返回一个 id,它从一个插入到另一个不同。

查询方法不会返回任何错误或异常,并且看起来表中没有具有该 ID 的行。我假设返回的puzzleId 也作为id 存储在表中,但这可能是错误的?!

任何我的意思是任何有关如何尝试解决此问题的建议或见解都将受到高度赞赏。

4

1 回答 1

0

首先你的创建表语句可能是错误的,如果你没有在语句中提到它,_id 将不会自动递增。应该是这样的

_id 整数主键自增

并检查您的创建表语句是否有其他错误

于 2013-03-24T19:11:06.370 回答