2013-12-09 65 views
0

我用來存儲客戶詳細信息的數據庫(我有一個表格輸入詳細信息和客戶數量自動生成)。如果我有1,2,3,4,5爲客戶ID,然後下一次,當我創建一個客戶的表單應該默認的客戶ID爲6.序列發生器

我達到了上述目標。但事情是如果我同時創建兩個客戶,兩個客戶都會顯示爲6.但我想每次打開一個表單的值客戶ID應該是唯一的。(即)如果我點擊創建客戶現在應該顯示6之後,我打開另一個形式同時我應該得到的客戶ID爲7 ...

如何實現這一目標?

+0

首先添加您的項目,然後獲取其ID。如果用戶取消表單,請將其刪除。否則...在添加新客戶時不顯示任何ID。什麼是關於身份證的東西?通常你的數據庫可以爲你生成它(如果你沒有使用數據庫,請考慮使用生成的GUID或數據層)。 –

+0

難道你不能將它作爲數據庫層的'IDENTITY'列嗎? –

+0

爲什麼不在數據庫中使用此功能?在mySQL中,您可以將您的ID字段設置爲自動增量,在MSSQL中您可以將您的ID字段設置爲標識列,在Oracle中您可以使用序列來生成ID等。 –

回答

2

我會建議做客戶ID與自動遞增的主鍵。

所以每當你添加值到客戶表,身份證將是唯一的,它會自動遞增。

原因這背後是:在你的代碼,如果兩個用戶使用在同一時間相同的形式,兩者都將收到相同的maxPartyId,當兩個用戶提交表單,同一ID maxPartyId + 1會存儲。這意味着客戶ID將重複在你的數據庫

1

兩種可能性:

  • 數據庫:讓你的DBMS爲你做的主鍵生成;在完成記錄生成之前,不要假設您擁有有效的身份證件。實施將主要取決於您選擇的數據庫。
  • 辛格爾頓/互斥鎖:讓一個類生成和分發的ID。使用lock statement來防止並行生成。

我個人推薦第一種方法;實現通常更簡潔,並且不必擔心線程鎖定。