Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.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中搜索缺少的rowId_Android_Sqlite - Fatal编程技术网

Android 在sqlite中搜索缺少的rowId

Android 在sqlite中搜索缺少的rowId,android,sqlite,Android,Sqlite,在“我的表”中,有已删除的行。我怎样才能找到第一个丢失的id 例: 我怎样才能找到Id 3不见了? 这至少需要在android 3.0上运行,在SQLite 3.8.3或更高版本中,您可以使用以下查询查找特定范围内第一个未使用的ID: WITH RECURSIVE all_ids(id) AS ( VALUES(1) UNION ALL SELECT id + 1 FROM all_ids LIMIT 99999 ) SELECT id FROM all_ids WHERE

在“我的表”中,有已删除的行。我怎样才能找到第一个丢失的id

例:

我怎样才能找到Id 3不见了?
这至少需要在android 3.0上运行,在SQLite 3.8.3或更高版本中,您可以使用以下查询查找特定范围内第一个未使用的ID:

WITH RECURSIVE all_ids(id) AS (
  VALUES(1)
  UNION ALL
  SELECT id + 1
  FROM all_ids
  LIMIT 99999
)
SELECT id
FROM all_ids
WHERE NOT EXISTS (SELECT 1
                  FROM MyTable
                  WHERE rowid = all_ids.id)
LIMIT 1
在早期的SQLite版本中,无法动态生成值。但是,所需的ID比已经存在的ID大一个,因此您可以从表中获取ID并检查下一个ID是否存在。零是处理空表的特殊情况:

SELECT id + 1
FROM (SELECT 0 AS id
      UNION ALL
      SELECT rowid
      FROM MyTable
      WHERE rowid <= 99999
     ) AS ids
WHERE NOT EXISTS (SELECT 1
                  FROM MyTable
                  WHERE rowid = ids.id + 1)
LIMIT 1

为什么您认为需要第一个缺少的ID?我需要生成一个唯一的ID,以便插入新行。生成的Id必须介于1和99999之间,因为99999之后的行是保留的或已使用的。它需要在android 3.0上运行,android 3.0具有SQLite 3.7.4。我最后在java中执行了一个for循环,并查询每个Id,直到找不到为止。可能不是最好的解决方案,但sqlite可能会做类似的事情。
SELECT id + 1
FROM (SELECT 0 AS id
      UNION ALL
      SELECT rowid
      FROM MyTable
      WHERE rowid <= 99999
     ) AS ids
WHERE NOT EXISTS (SELECT 1
                  FROM MyTable
                  WHERE rowid = ids.id + 1)
LIMIT 1