【发布时间】:2023-03-04 07:46:07
【问题描述】:
我有一个具有以下架构的表:
public static final String PRIMARY_KEY = "_id";
public static final String TASK_NAME = "name";
public static final String TASK_DESCRIPTION = "description";
public static final String IS_TASK_COMPLETED = "is_completed";
public static final String IS_TASK_DELETED = "is_deleted";
public static final String TASK_START_DATE = "start_date";
public static final String TASK_START_TIME = "start_time";
public static final String ESTIMATED_TASK_END_DATE = "end_date";
public static final String TIMESTAMP = "timestamp";
在一个片段中,我使用insert() 方法在表中插入一行。我知道这会返回插入行的rowId,但在this 线程中我读到了
如果一个表包含一个 INTEGER PRIMARY KEY 类型的列,那么 列成为 ROWID 的别名。然后您可以访问 ROWID 使用四个不同名称中的任何一个,描述的原始三个名称 以上或赋予 INTEGER PRIMARY KEY 列的名称。所有这些 名称是彼此的别名,并且在任何情况下都同样有效 上下文。
所以返回的 rowId 是否与主键相同。但是,如果删除一行并插入另一行,那么rowId 是否与primary key value "id" 相同?
【问题讨论】:
-
您的问题不清楚。如果您删除一条记录然后执行
INSERT,您是否在问rowId会发生什么? -
是的。我的意思是rowId的值和主键总是一样的吗?
-
还是不清楚……但是如果你把列整型和主键做成,那么
rowId应该是主键的同义词。 -
如果我在表中有一行,其 rowId 值为 8,主键值为 8。如果我删除这一行并插入另一行。 new PK 的值为 9。new rowId 的值是多少?
-
如果你有一个整数 PID 列,那么 SQLite 可能使用
9作为下一个值。但如果您没有将列设置为自动递增,它也可以使用另一个值。但是所有的赌注都没有了,因为你有一个StringPID 列。