Android 参数化更新DON';不要修改任何行
我一直在尝试使用这样的参数进行更新Android 参数化更新DON';不要修改任何行,android,sqlite,android-contentprovider,parameterized,Android,Sqlite,Android Contentprovider,Parameterized,我一直在尝试使用这样的参数进行更新 String whereClause=KEY\u FIELD\u code+“=?”字符串wherergs[]={“123456”} 但是,如果只更新0行,则什么都不起作用,即使与字段匹配的行存在。但是,当我像这样设置update语句时,结果会发生变化: String whereClause=KEY\u FIELD\u code+“=123456” 字符串wherergs[]=null 有人知道为什么会发生这种情况吗?最重要的是如何解决。注意:在这个表中,我使
String whereClause=KEY\u FIELD\u code+“=?”字符串wherergs[]={“123456”}
但是,如果只更新0行,则什么都不起作用,即使与字段匹配的行存在。但是,当我像这样设置update语句时,结果会发生变化:
String whereClause=KEY\u FIELD\u code+“=123456”
字符串wherergs[]=null
有人知道为什么会发生这种情况吗?最重要的是如何解决。注意:在这个表中,我使用FTS3进行全文搜索。我知道使用参数化查询的重要性,我希望使用它,而不是连接参数
谢谢
for(Customer client : clients){
Log.v(TAG, "Preparing..........");
values = new ContentValues();
values.put(FData.KEY_CLIENT_CODE, client.getCode());
values.put(FData.KEY_CLIENT_ZONE, client.getZone());
values.put(FData.KEY_CLIENT_NAME, client.getName());
values.put(FData.KEY_CLIENT_CREDIT, client.getCredit());
values.put(FData.KEY_CLIENT_ESTATE, client.getEstate());
values.put(FData.KEY_CLIENT_ENTRY, client.getEntry());
uri = ContentUris.withAppendedId(CPFertica.CLIENTS_URI, client.getCode());
if(exists(uri)){
Log.v(TAG, "Updating..........");
values.remove(FData.KEY_CLIENT_CODE);
String[] whereArgs = new String[]{client.getCode()+""};
String whereClause = FData.KEY_CLIENT_CODE + "=" + client.getCode();
_contentResolver.update(uri, values, whereClause, null);
}else{
Log.v(TAG, "Inserting..........");
_contentResolver.insert(uri, values);
}
表结构
private static final String DATABASE\u CREATE\u TABLE\u CLIENTS=“CREATE VIRTUAL TABLE”+
DB_TABLE_CLIENTS+“使用fts3(”+
_ID+“整数主键自动递增,”+
密钥\客户端\代码+“唯一整数,”+
密钥\u客户端\u区域+“文本,”+
KEY_CLIENT_NAME+“TEXT,”+
密钥\u客户端\u属性+“文本,”+
密钥\客户\信用证+“文本,”+
密钥\客户端\税务+“文本,”+
按键\u客户端\u项+文本+
键_客户_价格+“文本);”;
尝试使用replace语句,如果不存在新行,它将向db添加新行,否则将更新该行
ContentValues values = new ContentValues();
values.put(DBUtils.KEY_ID, data.getDoctorId());
values.put(DBUtils.KEY_FIRST_NAME, data.getFirstName());
values.put(DBUtils.KEY_LAST_NAME, data.getLastName());
count = db.replace(DBUtils.TABLE_USER, null, values);
或者试试这个
where子句==>DBUtils.KEY_ID+“=?”
其中,arges==>newstring[]{String.valueOf(id))在虚拟表中,不一定像在普通表中那样工作。
整数列中的值作为数字进行比较,因此字符串“123456”
永远不会与它们中的任何一个相等
wherergs
仅适用于字符串。(这是Android数据库API的一个设计缺陷。)
使用整数时,直接将它们插入SQL字符串
请注意,FTS表将其所有列存储为纯字符串;忽略主键、自动增量和唯一(如果不使用FTS查找,则对代码列的查找会很慢)。
如果您想要一个(自动递增)数字ID列,您必须使用。显示表定义。有@CL。这是保存我需要更新的注册表的表结构。是
KEY\u FIELD\u code
还是KEY\u CLIENT\u code
还是KEY\u CLIENTE\u CODIGO
?@CL。只是KEY\u CLIENT\u code,我试图解释这个情况时犯了一个错误。好的,我明白了,但是作为lon当我使用内容提供者时,我必须继续使用“yID”列。现在我改为使用“RoWID”。你认为适当的将值分配给“RoWID”,而不是让DB指派它?你总是可以做<代码>选择RoWID,作为ID,……/代码>。你是否想要特定的代码> RoWID < /Cord>值不取决于DB结构。