Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 参数化更新DON';不要修改任何行_Android_Sqlite_Android Contentprovider_Parameterized - Fatal编程技术网

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结构。