通过_id选择时,Sqlitedatabase查询无法正常工作

时间:2013-03-24 12:31:51

标签: android sqlite

我的sqlitedatabase几天来一直困在这个问题上。

我的插入方法有效,我在运行后打破并检查数据库现在是否包含行(在它为空之前),通过查询整个数据库,这是有效的。 这是insert方法,它返回生成的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方法,该方法在查询整个数据库或任何其他字段时都有效。

这是创建声明:

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才能在插入时自动增加,我相信这是有效的,因为insert方法返回一个id,它从一个插入到另一个插入不等。

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

任何,我的意思是对如何解决此问题的任何建议或见解表示高度赞赏。

1 个答案:

答案 0 :(得分:0)

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

_id整数主键自动增量

并检查您的create table语句是否存在其他错误