我的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,但这可能是错的?!
任何,我的意思是对如何解决此问题的任何建议或见解表示高度赞赏。
答案 0 :(得分:0)
首先,你的create table语句可能是错的,如果你没有在语句中提到它,_id将不会自动增加。它应该是这样的
_id整数主键自动增量
并检查您的create table语句是否存在其他错误