6

現在、JavaDB (Apache Derby) で主キーの型として使用していますが、分散システムを実装しているため、型をjava.util.UUIDINTに変更したいと考えています。これに関するいくつかの質問:

  • UUID には JavaDB/Derby のどのデータ型を使用すればよいですか? 言及されているのを見CHAR(16) FOR BIT DATAたことがありますが、私はそれについてあまり知りません。VARCHAR(16)代替品ですか?

  • JDBC でどのように使用すればよいですか? たとえばPreparedStatement、UUID を設定および取得するにはどうすればよいですか?

  • 後でデータベースを SQL Server に変更したい場合、java.util.UUID と互換性のあるデータ型はありますか?

簡単に言えば、JavaDB/Derby および JDBC で UUID を使用するにはどうすればよいですか?

4

3 に答える 3

12

UUID は 128 ビット値です。このCHAR(16) FOR BIT DATA型は、簡潔にするために文字形式で格納されたビット データであることを反映しています。VARCHAR(16)ビットフラグがないため、うまくいかないと思います。データベースは、バイナリ データを文字データに変換できる必要がありますが、これはエンコーディングを処理するため危険です。さらに重要なことに、それはあなたに何も買わないでしょう。UUID は常にVARCHAR128 ビットであるため、 overを使用してもスペースを節約できませんCHAR。したがって、意図したものを使用することもできますCHAR(16) FOR BIT DATA

JDBC では、少量のバイナリ データを処理するため、get/setBytes() メソッドを使用していると思います。(肯定的ではありません。これを試してみる必要があります)

そして、SQL Serverの部分についてはわかりません。

于 2010-10-17T20:44:50.797 に答える
3

コードで UUID オブジェクトを引き続き使用する場合は、fromString を使用して DB から UUID オブジェクトを作成し、toString を使用してそれらを DB に格納できます。

于 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 に答える