2016-02-20 84 views
0

我正在發現Android中的數據庫。我瞭解如何閱讀,但我沒有成功寫作。這裏是數據庫:更新數據庫android不起作用

 private static final String DATABASE_CREATE = "create table lesPlats 
      (id integer primary key autoincrement, nom text not null, quantite integer);"; 
     database.execSQL(DATABASE_CREATE); 

我編輯:

 values.put("nom", "plat1"); 
     values.put("quantite", 0); 
     database.insert("lesPlats", null, values); 

我想提高 「plat1」 的數量(調試版本註釋):

 int n=1; 
    // Cursor c = database.rawQuery("SELECT * FROM lesPlats WHERE id="+n, null); 
    // c.moveToFirst(); 
    // System.out.println("QUANTITY BEFORE: "+cursorToComment(c).quantite+ " (id: "+cursorToComment(c).id+")"); 

     database.rawQuery("UPDATE lesPlats SET quantite = 1 WHERE id = " + n, null); 

    // c = database.rawQuery("SELECT * FROM lesPlats WHERE id="+n, null); 
    // c.moveToFirst(); 
    // System.out.println("QUANTITY NEXT: "+cursorToComment(c).quantite+ " (id: "+cursorToComment(c).id+")"); 

與調試,我得到結果

QUANTITY BEFORE:0(id:1)

數量下一個:0(id:1)

所以在某個地方有一個錯誤。你能告訴我代碼是否好?特別這一個:

database.rawQuery("UPDATE lesPlats SET quantite = 1 WHERE id = " + n, null);

這意味着量是在ID = 1設置爲1,是嗎? 我嘗試更新,我有同樣的結果...

+0

我忘了描述存儲在數據庫中的類:public class Comment { public long id; public String nom; public int quantite; –

+0

不重要,你的問題是重複的。查看該帖子中的解決方案。 –

+0

雖然,你真的不應該使用rawQuery ...看到這裏的更好的解決方案http://stackoverflow.com/q/3760774/2308683 –

回答

0

讀取並調用第二胎之前關閉遊標,因爲查詢不會得到沒有它執行:

c = database.rawQuery("UPDATE lesPlats SET quantite = 1 WHERE id = " + n, null); 
c.moveToFirst(); 
c.close(); 
+0

中所述我嘗試使用您的代碼和database.execSQL(「UPDATE lesPlats SET quantite = 1 WHERE id =」+ n);但我沒有改變... –

0

對不起你們,我已經忘了cursorToComment過程中的設置數量...

private Comment cursorToComment(Cursor cursor) { 
    Comment comment = new Comment(); 
    comment.setId(cursor.getLong(0)); 
    comment.setNom(cursor.getString(1)); 
    comment.setQqte(cursor.getInt(2)); //here!! 
    return comment; 

THX很多

因此,三種方式更改數據庫:

ContentValues values = new ContentValues(); 
values.put("quantite", 1); 
database.update("lesPlats", values, "id=?", new String[]{"1"}); 

database.execSQL("UPDATE lesPlats SET quantite = 1 WHERE id = " + n); 

c = database.rawQuery("UPDATE lesPlats SET quantite = 1 WHERE id = " + n, null); 
c.moveToFirst(); 
c.close(); 

pfiou!