2012-03-27 38 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