我一直在尝试使用这样的参数进行更新
String whereClause = KEY_FIELD_CODE + “= ?” String whereArgs[] ={“123456″}
但是,即使存在与字段匹配的行,也不能只更新0行。但当我像这样设置update语句时,结果会发生变化:
String whereClause = KEY_FIELD_CODE + “= 123456″ String whereArgs[] =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_CREATE_TABLE_CLIENTS = "CREATE VIRTUAL TABLE " + DB_TABLE_CLIENTS + " USING fts3 ( "+ _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_CLIENT_CODE + " INTEGER UNIQUE, " + KEY_CLIENT_ZONE + " TEXT, " + KEY_CLIENT_NAME + " TEXT, " + KEY_CLIENT_ESTATE + " TEXT, " + KEY_CLIENT_CREDIT + " TEXT, " + KEY_CLIENT_TAX + " TEXT, " + KEY_CLIENT_ENTRY + " TEXT, " + KEY_CLIENT_PRICE + " TEXT);";
发布于 2014-07-12 15:55:37
在虚拟表中,affinities不一定像在普通表中那样工作。INTEGER列中的值被作为数字进行比较,因此字符串"123456"
永远不会与它们中的任何一个进行相等的比较。
whereArgs
仅适用于字符串。(这是Android数据库API的设计错误。)使用整数时,将它们直接插入到SQL字符串中。
请注意,FTS表将其所有列存储为纯字符串;主键、AUTOINCREMENT和UNIQUE将被忽略(如果不使用FTS查找,则代码列的查找速度会很慢)。如果您希望有一个(自动递增)数字ID列,则必须使用internal rowid column。
发布于 2014-07-11 15:49:08
尝试使用replace语句,如果新行不存在,则会将其添加到数据库中,否则将更新该行。
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 ==> String[] { String.valueOf(id))
https://stackoverflow.com/questions/24692520
复制相似问题