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);