Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.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 如何在sqlite中使用单个查询交换两行的值_Android_Sqlite_Android Sqlite - Fatal编程技术网

Android 如何在sqlite中使用单个查询交换两行的值

Android 如何在sqlite中使用单个查询交换两行的值,android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,我有一个包含单个表的数据库,我想用单个sqlite查询交换两行 我尝试了下面的查询,但这在sqlite中不起作用 UPDATE rules AS rule1 JOIN rules AS rule2 ON ( rule1.rule_id = 1 AND rule2.rule_id = 4 ) SET rule1.priority = rule2.priority, rule2.priority = rule1.priority ; 任何人都完成了此任务,请帮助我解决这样的查询在语法上是有效的,但

我有一个包含单个表的数据库,我想用单个sqlite查询交换两行

我尝试了下面的查询,但这在sqlite中不起作用

UPDATE
rules AS rule1
JOIN rules AS rule2 ON
( rule1.rule_id = 1 AND rule2.rule_id = 4 )
SET
rule1.priority = rule2.priority,
rule2.priority = rule1.priority
;

任何人都完成了此任务,请帮助我解决

这样的查询在语法上是有效的,但不会起作用,因为第一行在第二次更新读取之前已更新:

UPDATE rules
SET priority = CASE rule_id
               WHEN 1 THEN (SELECT priority FROM rules WHERE rule_id = 4)
               WHEN 4 THEN (SELECT priority FROM rules WHERE rule_id = 1)
               END
WHERE rule_id IN (1, 4)
如果您希望使用单个查询的原因是速度,那么只需对所有四条语句使用单个事务即可;这是您可以获得的最快速度:

db.beginTransaction();
试一试{
long prio1=DatabaseUtils.longForQuery(db,
“从规则中选择优先级,其中规则_id=“+1,null”);
long prio4=DatabaseUtils.longForQuery(db,
“从规则中选择优先级,其中规则_id=“+4,null”);
db.execSQL(“更新规则集优先级=“+prio4+”,其中规则_id=“+1”);
db.execSQL(“更新规则集优先级=“+prio1+”,其中规则id=“+4”);
db.setTransactionSuccessful();
}最后{
db.endTransaction();
}

why single sql语句?因为这可以通过四个查询完成,而且需要花费很多时间,这就是为什么我需要使用single query,如果您有解决方案,请在此发布使用两个:当然,请参见第一个是用于读取首字母的查询values@CL您的代码正在运行,但这只是更新一个字段,我想交换所有字段value@Jayesh那么您想交换除
规则\u id
之外的所有字段吗?