2014-04-23 80 views
0

當我輸入一個字符串到我的數據庫,我能夠檢索它。但是,如果我打開數據庫,並再次將另一個字符串到數據庫並關閉它,該項目不存在...多個項目到SQLite數據庫

  entry.open(); 
      entry.putChampion1IntoDb(jsonString); 
      entry.close(); 



      entry.open(); 
      entry.putChampion2IntoDb(jsonString2); 
      entry.close(); 

    public long putChampion1IntoDb(String json) { 
     ContentValues cv = new ContentValues(); 
     cv.put(KEY_CHAMPION_1, json); 

     return mDatabase.insert(DATABASE_TABLE, null, cv); 
    } 

    public long putChampion2IntoDb(String json) { 
     ContentValues cv = new ContentValues(); 
     cv.put(KEY_CHAMPION_2, json); 

     return mDatabase.insert(DATABASE_TABLE, null, cv); 
} 

後來,當我打電話給我的DB類檢索數據,串回來null

public JSONObject getChampions2() throws JSONException { 
     Cursor c = mDatabase.query(DATABASE_TABLE, mColumns, null, null, null, null, null); 
     c.moveToFirst(); 
     String jsonFeed = c.getString(c.getColumnIndex(KEY_CHAMPION_2)); 
     JSONObject json = new JSONObject(jsonFeed); 
     return json; 
} 

也許我正在導航數據庫錯誤的c.moveToFirst();

我會有大約5列,只有1行。 (至少在我的腦海裏我是這樣拍的)


| Champion1 | Champion2 | Champion3 | Champion4 | Champion5 |

第一次我.open()和.putChampionIntoDB(字符串),關聯的關鍵是第一列。 遊標與行相關聯是否正確?所以,c.moveToFirst()移動到第一行,我的所有信息都被存儲了,對嗎?

謝謝!

回答

2

我想你不明白數據庫是如何工作的。每次當您調用插入時,都會插入新行。真的,你有這樣的數據: | Champion1 | Champion2 | Champion3 | Champion4 | Champion5 |

| somedata | null | null | null | null |

| null | somedata | null | null | null |

等等。這就是爲什麼當您檢索第一行並嘗試獲取KYY_CHAMPION2時它爲空。

我想,你真的需要製作表格

| _id | champion |

並將每個數據部分存儲在單獨的行中。然後你可以輕鬆地迭代拋出它們。

如果您仍然希望將數據存儲在一行中,則需要在第一次後調用db.update()而不是db.insert()。但是,當您致電更新時,您必須確定要更新哪一行。如果你沒有一些列作爲主鍵,它可能是一個問題。

+0

謝謝!說得通。 so, | _id | champion_key_1 | | _id | champion_key_2 | ....等等... 以及很難把行中的評論 – DDukesterman

+0

謝謝!得到它的工作。 – DDukesterman