sql >> Databáze >  >> RDS >> Mysql

Jak uložit UUID jako binární (16) v Javě

Zkuste to uložit jako bajty:

UUID uuid = UUID.randomUUID();
byte[] uuidBytes = new byte[16];
ByteBuffer.wrap(uuidBytes)
        .order(ByteOrder.BIG_ENDIAN)
        .putLong(uuid.getMostSignificantBits())
        .putLong(uuid.getLeastSignificantBits());

con.createQuery("INSERT INTO TestTable(ID, Name) VALUES(:id, :name)")
    .addParameter("id", uuidBytes)
    .addParameter("name", "test1").executeUpdate();

Trochu vysvětlení:vaše tabulka používá BINARY(16), takže serializace UUID jako jeho nezpracovaných bajtů je opravdu přímočarý přístup. UUID jsou v podstatě 128bitové int s několika vyhrazenými bity, takže tento kód jej zapíše jako big-endian 128bitový int. ByteBuffer je jen snadný způsob, jak proměnit dvě longs na bajtové pole.

Nyní v praxi nebude veškeré úsilí o převod a bolesti hlavy stát za těch 20 bajtů, které ušetříte na řádek.




  1. Atomic UPDATE .. SELECT v Postgresu

  2. Typy SQL příkazů

  3. Výkon MySQL VIEW pro tabulky v kombinaci s UNION ALL

  4. Proč PostgreSQL nevrací hodnoty null, když je podmínka <> pravdivá