Как использовать поля типа SQLite UNIQUEIDENTIFIER в Java - PullRequest
0 голосов
/ 15 января 2020

У меня есть база данных Sqlite с полями Id, объявленными как тип UNIQUEIDENTIFIER. Браузер БД для SQLite показывает эти поля как тип BLOB, а тип данных в ячейке - как двоичные 16 байтов. Они выглядят как «a1 75 e0 47 e6 07 47 37 a7 ea 0a 8d 7f 22 f6 55». Мой вопрос заключается в том, как сохранить поля этого типа из набора результатов, чтобы использовать их в другом операторе SQL. Пример:

      sql = "select id from contract where customer= 'John'"
      ps = connection.prepareStatement(sql);
      rs = ps.executeQuery();
      while (rs.next() {
          id = rs.getString(1);
      }
      sql = "select * from invoices where customerid = " + id;

Я пытался использовать id в качестве байта типа, массива байтов, inputtream, ничего не работает. Спасибо за ваш ответ.

1 Ответ

0 голосов
/ 15 января 2020

Они, вероятно, реализовали 16 уникальных байтов с помощью UUID. К сожалению, в ResultSet нет подходящего типа SQL. UUID java класса является подходящим держателем данных:

public static UUID toUUID(byte[] bytes) {
    ByteBuffer idBuffer = ByteBuffer.wrap(bytes);
    return new UUID(idBuffer.getLong(), idBuffer.getLong());
}

    UUID uuid = toUUID(rs.getBytes(1));

public static byte[] fromUUID(UUID uuid) {
    byte[] bytes = new byte[16];
    ByteBuffer idBuffer = ByteBuffer.wrap(bytes);
    idBuffer.putLong(uuid.getMostSignificantBits());
    idBuffer.putLong(uuid.getLeastSignificantBits());
    return bytes;
}

    rs.setBytes(1, fromUUID(uuid));

Причины не при использовании byte[]: это слишком низкий уровень, ничего не говоря и в необходимость некоторых операций.

UUID, с другой стороны, имеет значение уникального идентификатора. Он также имеет equals, compareTo, hashCode и даже несколько читабельный toString.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...