2010-10-17 22 views
4

我目前使用INT作爲JavaDB(Apache Derby)中主鍵的類型,但是由於我正在實現分佈式系統,因此我想將其類型更改爲java.util.UUID。關於此問題的幾個問題:如何在JavaDB/Derby和JDBC中使用UUID?

  • 我應該在UUID中使用JavaDB/Derby中的哪種數據類型?我已經看到CHAR(16) FOR BIT DATA被提及,但我不太瞭解它。是VARCHAR(16)替代?

  • 我應該如何在JDBC中使用它?例如。在PreparedStatement中,我應該如何設置並獲取UUID?

  • 如果我後來想將數據庫更改爲SQL Server,是否存在與java.util.UUID兼容的數據類型?

簡單地說,我應該如何在JavaDB/Derby和JDBC中使用UUID?

回答

10

UUID是一個128位的值。爲了簡明起見,類型CHAR(16) FOR BIT DATA反映它是以字符形式存儲的位數據。我不認爲VARCHAR(16)會工作,因爲它沒有位標誌。數據庫必須能夠將二進制數據轉換爲處理編碼的字符數據,並且具有風險。更重要的是,它不會爲你買東西。由於UUID是總是 128位,因此使用VARCHAR而不是CHAR可節省空間。所以你不妨使用預期的CHAR(16) FOR BIT DATA

對於JDBC,我認爲你使用get/setBytes()方法,因爲它處理的是少量的二進制數據。 (不積極,將不得不試試這個)

並沒有關於SQL Server部分的想法。

-4

您可以將UUID轉換爲字符串並將其存儲爲VARCHAR。大多數UUID字符串格式與此類似:使用連字符分隔的32位數字:00000000-0000-0000-0000-000000000000,那麼您需要一個VARCHAR(36),或者如果您願意,可以使其類似於VARCHAR(64) ,因爲它不會傷害你的VARCHAR中有額外的'空間' - 只有實際的數字被存儲。

將其轉換爲字符串後,只需調用Statement.SetString將其包含在INSERT語句中即可。

3

如果您仍想在代碼中使用UUID對象,則可以使用fromString從DB和toString創建UUID對象以將它們存儲在數據庫中。