sql >> Database >  >> RDS >> Mysql

Een UUID opslaan als binair (16) in java

Probeer het op te slaan als bytes:

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();

Een beetje uitleg:je tabel gebruikt BINARY (16), dus het serialiseren van UUID als zijn onbewerkte bytes is een heel eenvoudige benadering. UUID's zijn in wezen 128-bits ints met een paar gereserveerde bits, dus deze code schrijft het uit als een big-endian 128-bits int. De ByteBuffer is gewoon een gemakkelijke manier om twee longs in een byte-array te veranderen.

In de praktijk zijn alle conversie-inspanningen en hoofdpijn de 20 bytes die u per rij bespaart niet waard.




  1. Entity framework 5.0 code-first met MySQL in WPF

  2. Kan klasse [org.springframework.orm.hibernate5.LocalSessionFactoryBean] niet vinden voor boon met naam 'hibernate5AnnotatedSessionFactory'

  3. MyBatis-parameter van HashMap

  4. Zijn er gepubliceerde richtlijnen voor coderingsstijlen voor SQL?