2014-09-23 28 views
0

我想使用Java 7在轉換時刻字符串一個唯一的主鍵

特別改造的String(從XML文件)到一個數據庫主鍵,我想確保此值被獨特尊重DB主密鑰規範是:NUMBER(20)。

,我試圖改變這個特性的字符串:

PDR_20140909150001

很明顯,我可以忽略字符串的第一部分(因爲對於所有文件相同),但我必須在int值中變換一個時間戳字符串,如20140909150001,該值必須是唯一的,並且具有最多20位數的長度。

有什麼想法?我能怎麼做?

+0

你必須使它成爲20位數的整數? – 2014-09-23 10:13:20

+0

不,它只是一個上限 – Zany 2014-09-23 10:14:44

+0

然後,你可以在Date對象中轉換這個字符串,並在第二秒花費時間,會給你int值。我認爲你的字符串是「PDR_yyyymmddhhmmss」格式 – 2014-09-23 10:16:26

回答

1

你可以轉換字符串中使用的Integer.parseInt()來詮釋,我認爲20140909150001足夠獨特。希望這個幫助:)

+0

不幸的是,時間戳不是唯一的,因爲我們的系統與各種子系統連接。所以,我們可以有一個場景,我們的系統從不同的子系統接收相同的時間戳。 – Zany 2014-09-23 10:19:49

+1

這些:getDateTime()在Java中(例如,我得到:20140923172200),將其轉換爲字符串,然後將其附加到20140909150001.最終數據是2014090915000120140923172200。那麼你可以轉換它 – bayuforest 2014-09-23 10:23:17

+0

我遵循你的建議,但我怎麼能將一個24位數字(2014090915000120140923172200)的字符串轉換爲最大值爲20的int值,以保持唯一性? – Zany 2014-09-23 10:52:45

1

你可以簡單地追加當前系統秒,並將其轉換爲雙倍。

即「PDR_20140909150001」將被轉換爲「2014090915000159」作爲字符串,其中「59」是當前系統的第二秒,將該值轉換爲雙精度值。

1

您可以使用java.math.BigInteger並映射到數據庫類型號(XX)。

關於獨特性可能會:

  • 追加額外秒,這將被認爲是您的子系統ID
  • 的一個附加的自動生成的唯一的ID爲每一個數據庫插入
+0

我怎麼能轉換25位像2014090915000120140923172200x一個字符串(用「X」是自動生成的ID)中的最大20保留唯一一個int值? – Zany 2014-09-23 10:54:21

+0

@ Zany我建議'BigInteger',因爲上限受系統內存限制,所以它適用於大數字(XX)'。我不同意@ bayuforest的解決方案,因爲我更喜歡附加一個小的自動生成的唯一ID而不是14個dateTime數字;這樣做我不會有「25 - > 20」的問題。順便說一句,我會做@Gyro Gearless。 – taringamberini 2014-09-24 06:56:54

相關問題