2014-01-17 3 views
0

У меня есть база данных с таблицами |ID|NAME|, и у меня есть функция, которая удаляет строку в таблице.Удаление строки в android SQLite

public void deleteWord (int id){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    db.delete(TABLE_WORDS, KEY_ID + "="+id, null); 
    db.close(); 
} 

это, как я создаю мой стол

String createSetTable = 
      "CREATE TABLE "+TABLE_SETS+"(" 
      +KEY_SET_ID+ " INTEGER PRIMARY KEY, " 
      +KEY_SET_NAME+ " TEXT) "; 
    db.execSQL(createSetTable); 

Проблема заключается в том, что эта функция удаляет строку с указанным идентификатором, и что ID остается пустым, как массив .Для примера у меня есть таблица

| 1 | Mike |

| 2 | Jane |

| 3 | Dave |

| 4 | Kate |

после использования 'deleteWord (2)' Я получаю что-то вроде этого, и весь алгоритм программы запутан.

| 1 | Mike |

| 3 | Dave |

| 4 | Kate |

Так что я могу сделать, чтобы обновлять свой ID каждый раз, когда я удаляю строку? Есть ли специальный запрос, который делает это автоматически?

ответ

0

Проблема в Autoincrement, которая применяется на Роу ID, как упоминается здесь

http://www.sqlite.org/autoinc.html

, чтобы решить эту проблему, попробуйте сделать еще одно поле ID, что вы имеете дело с ним в качестве первичного ключа, как этот

ID | EmlpoyeeID | EmployeeName

2

Ваши идентификаторы не должны изменяться. Идентификаторы должны придерживаться их соответствующих строк все время. Я предлагаю вам изменить свою логику, чтобы ожидать, что эти идентификаторы останутся неизменными и оставить базу данных в одиночку, что и нужно делать.

Если вы обязательно должны изменить эти идентификаторы, то не сделать свой ID столбец первичного ключа, удалив primary key заявление, как следует:

String createSetTable = 
     "CREATE TABLE "+TABLE_SETS+"(" 
     +KEY_SET_ID+ " INTEGER, " 
     +KEY_SET_NAME+ " TEXT) "; 
db.execSQL(createSetTable); 

Но теперь, каждый раз, когда вы вставляете или удалить строка, вам придется перебирать и обновлять все ваши строки с помощью правильных идентификаторов, что опять же является утомительной и неэффективной задачей, которую я не рекомендую.

0

Не уверен, что я правильно понял, но здесь.

Предполагая, что вы хотите изменить свой ПК, чтобы ваш измененная таблица заканчивается так:

1, Mike 2, Дэйв 3, Кейт

Этот вопрос может пролить некоторый свет на эту тему : How to update primary key

Вы не должны изменять значение первичных ключей, хотя это приведет к появлению внешних ключей в других таблицах, указывающих на неправильный элемент. Также возможно обновить внешние ключи. Протектор осторожно.

Смежные вопросы