我应该如何在JavaDB/Derby和JDBC中使用UUID?

我应该如何在JavaDB/Derby和JDBC中使用UUID?,jdbc,types,uuid,derby,javadb,Jdbc,Types,Uuid,Derby,Javadb,我目前使用INT作为JavaDB(ApacheDerby)中主键的类型,但由于我正在实现一个分布式系统,所以我想将该类型更改为。关于这一点,有几个问题: 在JavaDB/Derby中,UUID应该使用什么数据类型?我已经看到有人提到位数据的字符(16),但我对它知之甚少。VARCHAR(16) 我应该如何在JDBC中使用它?例如,在PreparedStatement中,我应该如何设置和获取UUID 如果我以后想将数据库更改为SQL Server,是否有与java.util.UUID兼容的数据类

我目前使用
INT
作为JavaDB(ApacheDerby)中主键的类型,但由于我正在实现一个分布式系统,所以我想将该类型更改为。关于这一点,有几个问题:

  • 在JavaDB/Derby中,UUID应该使用什么数据类型?我已经看到有人提到位数据的字符(16),但我对它知之甚少。
    VARCHAR(16)

  • 我应该如何在JDBC中使用它?例如,在
    PreparedStatement
    中,我应该如何设置和获取UUID

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


简单地说,我应该如何在JavaDB/Derby和JDBC中使用UUID?

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

对于JDBC,我认为您可以使用get/setBytes()方法,因为它处理的是少量二进制数据。(不确定,必须尝试此方法)


不知道SQL Server部分。

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


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

如果仍要在代码中使用UUID对象,可以使用fromString从DB创建UUID对象,并使用toString将其存储在DB中