2013-12-09 19 views
0

У меня есть БД, в которой хранятся данные о клиентах (у меня есть форма для ввода данных, и номер клиента генерируется автоматически). Если у меня есть 1,2,3,4,5 в качестве идентификаторов клиентов, то в следующий раз, когда я создам клиенту Форма должна по умолчанию указываться как 6.Последовательный генератор

Я достиг выше цели. Но Вещь - это то, что я одновременно создаю двух клиентов, которые будут отображаться как 6. Но то, что я хочу каждый раз открывать форму, Идентификатор клиента должен быть уникальным. (Т. Е.) Если я нажму кнопку «Создать клиент», теперь он должен показать 6, и после этого я открываю другую форму одновременно. Я должен получить идентификатор клиента в виде 7 ...

Как достичь этого?

+0

Сначала добавьте свой товар, затем введите его идентификатор. Если пользователь отменит форму, просто удалите ее. В противном случае ... при добавлении нового клиента не показывать идентификатор. На что все это связано? обычно ваша база данных может сгенерировать ее для вас (если вы не используете базу данных, используйте сгенерированный GUID или слой данных). –

+0

Разве вы не имеете дело с этим как столбцы «ИДЕНТИФИКАЦИЯ» на уровне базы данных? –

+0

Почему бы не использовать эту функциональность в БД? В mySQL вы можете указать свое поле идентификатора автоинкремента, в MSSQL вы можете установить поле идентификатора в качестве столбца идентификации, в Oracle вы можете использовать последовательность для генерации идентификатора и т. Д. –

ответ

2

Я предлагаю сделать ID клиента в качестве первичного ключа с автоматическим приращением.

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

Причина этого заключается в: В вашем коде, если два пользователя используют ту же форму, в то время, как получит тот же maxPartyId и когда оба пользователя отправить форму, тот же Id maxPartyId + 1 будет сохраняются. Это означает, что идентификатор клиента будет дублировать в базе данных

1

две возможностей:

  • Database: Пусть ваш СУБД делает основную генерацию ключей для вас; не предполагайте, что у вас есть действительный идентификатор до окончания записи. Реализация будет в значительной степени зависеть от выбранной вами базы данных.
  • Синглтон/блокировка взаимного исключения: Пусть один класс генерирует и распространяет идентификаторы. Используйте lock statement для предотвращения параллельного генерации.

Лично я бы рекомендовал первый подход; Реализация обычно более чистая, и вам не нужно беспокоиться о блокировке потоков.

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