2012-03-27 60 views
0

更新表當試圖更新爲我記錄一個記錄我使用這個代碼錯誤的SQLite中

private void UpdateCattleRecord(UpdateCattleRecord updateRecord){ 
      mDB.beginTransaction(); 
      String where = "_ID="; 
      String[] RecordToUpdate = {Cattle._ID}; 
      Toast.makeText(this,"Updating Animal "+ RecordToUpdate, Toast.LENGTH_LONG).show(); 
      try { 
        ContentValues CattleFieldsToUpdate = new ContentValues(); 
        CattleFieldsToUpdate.put(Cattle.CATTLE_ANIMALID,updateRecord.getCattleName()); 
        CattleFieldsToUpdate.put(Cattle.CATTLE_TYPE, updateRecord.getCattleType()); 
        CattleFieldsToUpdate.put(Cattle.CATTLE_LOCATION, updateRecord.getCattleLocation()); 
        CattleFieldsToUpdate.put(Cattle.CATTLE_DOB, updateRecord.getCattleDob()); 
        CattleFieldsToUpdate.put(Cattle.CATTLE_DAM, updateRecord.getCattleDam()); 
        CattleFieldsToUpdate.put(Cattle.CATTLE_SEX, updateRecord.getCattleSex()); 
        mDB.update(Cattle.CATTLE_TABLE_NAME,CattleFieldsToUpdate, where, RecordToUpdate); 
        mDB.setTransactionSuccessful(); 
       } finally { 
       mDB.endTransaction(); 
      } 
    } 

我的日誌顯示

標籤數據庫SQLite的返回:錯誤代碼= 1 ,味精=近「=」:語法錯誤

研究這個之後,我覺得我在正確的地方的一切,但很明顯,我不這樣做, 當我看看NEX在登錄這是當然的 '紅',它讓我看到所有正確的數據T的錯誤,

03-27 15:15:29.291:E /數據庫(12011):錯誤更新DATE_OF_BIRTH = 3月27日, 2012 animaltype =小牛性別= F位置=東部大壩= 601 animal_id = 601A使用UPDATE牛SET SET date_of_birth = ?, animaltype =?,sex =?,location =?,dam =?,animal_id =? WHERE_ID =

我明顯遇到了_ID值的問題,但似乎無法找到它。有人能指出我的語法錯誤在哪裏嗎?

更新

發生的問題,因爲我是不合格的,我想更新的記錄(_ID)的實際值。一旦我將它作爲參數傳遞給updaterecords函數,更新就按計劃進行。

感謝您的輸入,它幫助我縮小了我做錯的地方。

回答

0

檢查數據庫的創建,你可能有一個列名爲_id(雖然你是指它由_ID,它的名字是_id),而不是_ID

String where = "_id= ?"; // ? represent the value from the selection arguments String array 

或更好:

String where = Cattle._ID + "= ?"; 

編輯: 在你所在的選擇參數中:

String[] RecordToUpdate = {Cattle._ID}; 

你可能想就擺在那裏的一些ID,你從什麼地方得到(您想更新的記錄,一個long數的),現在你正在做的:

WHERE _ID = _ID (or _id) 

,這將失敗。

+0

Slukian,我驗證了_ID的拼寫和它在所有情況下正確大寫。它不會讓我使用除字符串之外的任何內容,但是當系統給我一個x表示語法不正確的情況時,我將如何爲值RecordtoUpdate分配一個long? – Hank 2012-03-27 20:58:50

+0

@Hank使用'String where = Cattle._ID +「=?「;'WHERE'子句並使用'String [] RecordToUpdate = {」「+ longValue};'作爲where選擇子句,('longValue'是要更新的記錄的ID) – Luksprog 2012-03-28 05:04:05

0

嘗試:

mDB.update(Cattle.CATTLE_TABLE_NAME,CattleFieldsToUpdate, "_ID="+Cattle._ID, null); 

嘗試:

mDB.update(Cattle.CATTLE_TABLE_NAME,CattleFieldsToUpdate, "_ID="+updateRecord.getId(), null); 
+0

Crossfire,使用語法沒有錯誤,但它更新數據庫中的每個記錄(只有兩個,所以...) – Hank 2012-03-27 20:56:53

+0

你想更新對象UpdateCattleRecord updateRecord的權利?如果是這樣,你必須設置WHERE子句,像我的第二部分答案。 – 2012-03-27 21:39:02