О “_id” поле в Android SQLite

Попробуйте следующий код (я его не тестировал), но в основном используйте .simulate() непосредственно на оболочке и используйте .toHaveBeenCalled().

it('should test Button component', () => {
    it('shoud test click event', () => {
      const mockCallBack = jest.fn();  
      const button = shallow((<Button onClick={mockCallBack}>1</Button>));
      button.simulate('click');
      expect(mockCallBack).toHaveBeenCalled()
    });
  });
66
задан Janusz 15 July 2010 в 14:06
поделиться

5 ответов

Во многих случаях довольно удобно иметь поле id. Я предпочитаю, чтобы мой был автоинкрементным (как показано ниже). Я всегда нахожу новые применения для поля id:)

Когда приходит время присоединить данные к адаптеру, я предпочитаю использовать псевдоним таблицы для запроса поля идентификатора как _id. Пример: SELECT id _id, msg from message order by id. Таким образом, адаптер видит поле под названием _id, и все счастливы.

Вот пример того, как я определяю свои таблицы:

CREATE TABLE message (_id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER, tripID TEXT, msg TEXT);
9
ответ дан SK9 24 November 2019 в 15:02
поделиться

Почему бы не использовать _ROWID_ ?

SQLite обеспечивает это в любом случае для каждой строки, так что вы можете просто присвоить ему псевдоним _id в своем операторе select.

22
ответ дан Phil Lello 24 November 2019 в 15:02
поделиться

Если вы определили свой столбец _id как автоинкрементное целое число, это фактически псевдоним для столбца ROWID, который SQLite предоставляет по умолчанию ( https://www.sqlite.org/lang_createtable.html#rowid ) ,

Ваше заявление о создании должно иметь форму ...

CREATE TABLE t(_id INTEGER PRIMARY KEY ASC, y, z);

Чтобы доказать это работает ...

UPDATE t SET _id=22 WHERE _id=11;

затем

SELECT ROWID, _id FROM t;

и вы обнаружите, что _id и ROWID имеют одинаковое значение.

Обратите внимание, что если вы используете DESC в CREATE, создается новый столбец, и ROWID не является псевдонимом.

6
ответ дан David Arenburg 24 November 2019 в 15:02
поделиться

Конечно, если вы создаете свой собственный виджет пользовательского интерфейса и собственный адаптер, вам не нужно называть свой первичный ключ как «_id». Это может быть любое имя, которое вы хотите. Но вы будете нести ответственность за управление своими коллекциями виджетов пользовательского интерфейса и связывание их с правой строкой в ​​вашей базе данных. «_id» полезен только для ListView, как указал Брэд.

0
ответ дан Yaojin 24 November 2019 в 15:02
поделиться

_id полезен при использовании улучшенных адаптеров, использующих Cursor (например, ResourceCursorAdapter). Он используется этими адаптерами для предоставления идентификатора, который может использоваться для ссылки на конкретную строку в таблице, которая связывает элемент в том, для чего используется адаптер (например, строка в ListView).

Это не обязательно, если вы не собираетесь использовать классы, которым нужен столбец _id в курсоре, и вы также можете использовать «как _id», чтобы другой столбец выглядел так, как будто он называется _id в вашем курсоре.

55
ответ дан 24 November 2019 в 15:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: