参数化更新不要移动任何行



我一直在尝试使用这样的参数进行更新

String whereClause = KEY_FIELD_CODE + “= ?” String whereArgs[] ={“123456″}

但是没有任何工作只是更新0行,即使与字段匹配的行存在。但是,当我像这样设置更新语句时,结果发生了变化:

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

在虚拟表中,亲和性不一定像在普通表中那样工作。INTEGER列中的值作为数字进行比较,因此字符串"123456"永远不会与它们中的任何一个进行相等的比较。

whereArgs只适用于字符串。(这是Android数据库API的设计缺陷。)当使用整数时,直接插入到SQL字符串中。

请注意,FTS表将其所有列存储为纯字符串;忽略PRIMARY KEY、AUTOINCREMENT和UNIQUE(如果不使用FTS查找,对代码列的查找会很慢)。如果你想要一个(自动递增的)数字ID列,你必须使用内部行号列。

尝试使用替换语句,它将添加新的行到数据库中,如果它不存在,否则更新行。

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 clause ==> DBUtils。Key_id +"=?"where arges ==> new String[] {String. valueof (id))

最新更新