6

我目前INT在 JavaDB (Apache Derby) 中用作主键的类型,但由于我正在实现分布式系统,我想将类型更改为java.util.UUID。关于这个的几个问题:

  • 我应该为 UUID 使用 JavaDB/Derby 中的什么数据类型?我见过CHAR(16) FOR BIT DATA有人提到,但我不太了解。是VARCHAR(16)替代品吗?

  • 我应该如何将它与 JDBC 一起使用?例如PreparedStatement,我应该如何设置和获取 UUID?

  • 如果我以后想将数据库更改为 SQL Server,是否有与 java.util.UUID 兼容的数据类型?

简而言之,我应该如何将 UUID 与 JavaDB/Derby 和 JDBC 一起使用?

4

3 回答 3

12

UUID 是一个 128 位的值。为简洁起见,CHAR(16) FOR BIT DATA类型反映为以字符形式存储的位数据。我认为VARCHAR(16)不会起作用,因为它没有位标志。数据库必须能够将二进制数据转换为处理编码并且有风险的字符数据。更重要的是,它不会给你买任何东西。由于 UUID始终VARCHAR为 128 位,因此使用over不会节省空间CHAR。所以你不妨使用预期的CHAR(16) FOR BIT DATA.

对于 JDBC,我认为您使用 get/setBytes() 方法,因为它处理少量的二进制数据。(不肯定,必须试试这个)

并且不知道 SQL Server 部分。

于 2010-10-17T20:44:50.797 回答
3

如果您仍想在代码中使用 UUID 对象,您可以使用 fromString 从数据库创建 UUID 对象,并使用 toString 将它们存储在数据库中。

于 2012-11-06T18:38:49.313 回答
-4

您可以将 UUID 转换为字符串并将其存储为 VARCHAR。大多数 UUID 字符串格式与此类似: 32 位用连字符分隔:00000000-0000-0000-0000-000000000000,所以你需要一个 VARCHAR(36),或者如果你愿意,可以将其设置为 VARCHAR(64) ,因为在您的 VARCHAR 中提供额外的“空间”并没有什么坏处——只存储实际的数字。

将其转换为字符串后,只需调用 Statement.SetString 将其包含在 INSERT 语句中。

于 2010-10-17T23:26:41.890 回答