2013-03-24 93 views
0

我一直坚持这个问题与我的sqlitedatabase几天现在。通过_id选择sqlql数据库查询不起作用

我的插入方法的工作原理是,它在运行后断开并通过查询整个数据库来检查数据库现在是否包含行(在它为空之前)。 这是返回生成的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。

这是create语句:

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必须为整数,以AUTO_INCREMENT上插入,我相信作品,因为insert方法返回一个ID,它从一个变化插入到另一个。

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

任何和我的意思是如何尝试解决这个问题的任何建议或意见是高度赞赏。

+0

你怎么插入的难题? – 2013-03-24 19:35:29

回答

0

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

_id整数主键自动增量

,并检查您的CREATE TABLE语句中的其他错误

+0

为了让自动增量工作,主键必须被指定,这固定了我的问题=) – mnlia 2013-03-24 20:55:02