2013-03-24 77 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