Java 更新Sqlite中的表时出错

Java 更新Sqlite中的表时出错,java,android,sqlite,Java,Android,Sqlite,当试图更新我的一条记录时,我使用的是以下代码 private void UpdateCattleRecord(UpdateCattleRecord updateRecord){ mDB.beginTransaction(); String where = "_ID="; String[] RecordToUpdate = {Cattle._ID}; Toast.makeText(thi

当试图更新我的一条记录时,我使用的是以下代码

    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,msg=near=:语法错误

经过研究,我想我把所有东西都放在正确的地方了,但显然我没有, 当我查看日志中的下一个错误时,它当然是红色的,它向我显示了所有正确的数据

03-27 15:15:29.291:E/数据库12011:错误更新日期出生日期=2012年3月27日动物类型=小牛性别=F位置=东部大坝=601动物id=601A使用更新牛设置日期出生日期=,动物类型=,性别=,位置=,大坝=,动物id=?在哪里=

我显然对_ID的值有问题,但似乎找不到它。有人能指出我的语法错误在哪里吗

更新

出现此问题是因为我未能传递要更新的记录ID的实际值。一旦我将其作为参数传递给updaterecords函数,更新就按计划进行了


感谢您的输入,它帮助我缩小了我做错的地方。

检查您的数据库创建,您可能有一个名为_ID的列。尽管您通过_ID引用它,但它的名称是_ID而不是_ID:

或者更好:

String where = Cattle._ID + "= ?";
编辑: 在where selection参数中,您将:

String[] RecordToUpdate = {Cattle._ID};
您可能想在其中输入一些您从要更新的记录中获得的id,一个很长的数字,现在您正在执行:

WHERE _ID = _ID (or _id)
这将失败。

尝试:

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


Crossfire,使用该语法没有错误,但它更新了数据库中的每个记录只有两条,所以…您想更新对象UpdateCatalRecord updateRecord,对吗?如果是这样的话,你必须将WHERE子句设置为类似于我答案的第二部分。Slukian,我验证了_ID的拼写,并且在所有情况下它都正确大写。当我这样做时,它只允许我使用字符串,系统会给我一个x,表示语法不正确,我如何为RecordtoUpdate的值分配一个long?@Hank use string where=bown.\u ID+=?;对于WHERE子句,使用字符串[]RecordToUpdate={+longValue};对于where selection子句,longValue是要更新的记录的id。
 mDB.update(Cattle.CATTLE_TABLE_NAME,CattleFieldsToUpdate, "_ID="+Cattle._ID, null);
mDB.update(Cattle.CATTLE_TABLE_NAME,CattleFieldsToUpdate, "_ID="+updateRecord.getId(), null);