2016-07-10 10 views
1

Ich habe eine Tabelle mit dem folgenden Schema:In Android Sqlite ist ROWID wie Primärschlüssel?

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

in einem Fragment ich bin eine Zeile in der Tabelle unter Verwendung des insert() Verfahren eingesetzt wird. Ich weiß, dass dies die rowId der eingefügten Zeile kehrt aber in this Thread I gelesen, dass

Wenn eine Tabelle eine Spalte vom Typ INTEGER PRIMARY KEY enthält, so dass Spalte ein Alias ​​für die ROWID wird. Sie können dann auf die ROWID mit einem von vier verschiedenen Namen zugreifen, den ursprünglichen drei oben beschriebenen Namen oder dem Namen der Spalte INTEGER PRIMARY KEY. All diese Namen sind Aliase für einander und funktionieren in jedem Kontext.

So wird die zurückgegebene rowId gleich wie der Primärschlüssel sein. Was aber, wenn eine Zeile gelöscht wird und in diesem Fall eine andere Zeile eingefügt wird, wird die rowId dieselbe sein wie die primary key value "id"?

+1

Ihre Frage ist unklar. Fragen Sie, was mit der 'rowId' passiert, wenn Sie einen Datensatz löschen und dann ein' INSERT' machen? –

+0

Ja. Ich meine, wird der Wert von rowId und der Primärschlüssel immer gleich sein? – Paras

+0

Noch nicht klar ... aber wenn Sie die Spalte Integer und Primärschlüssel machen, dann sollte 'rowId' synonym mit dem Primärschlüssel sein. –

Antwort

7

Alle Tabellen (ignorieren exceptions) haben eine Zeilen-ID.

Wenn es keine Spalte als INTEGER PRIMARY KEY deklariert ist, die rowid von den anderen Spalten getrennt ist:

CREATE TABLE A (_id INT PRIMARY KEY, name TEXT); -- not "INTEGER" 

| rowid | _id | name | 
+-------+-----+------+ 
|  1 | 1 | this | 
|  2 | 2 | that | 
|  3 | 30 | NULL | -- does not need to be the same 

Wenn eine INTEGER PRIMARY KEY-Spalte ist, beide rowid und die deklarierte Spaltennamen sind Aliase für die gleichen Wert:

CREATE TABLE B (_id INTEGER PRIMARY KEY, name TEXT); 

| rowid | name | 
| = _id |  | 
+-------+------+ 
|  1 | this | 
|  2 | that | 
|  3 | NULL | 
Verwandte Themen