Apache Derby: typ danych CHAR FOR BIT DATA
Opis
Łańcuch bajtów o stałej wskazanej długości od 1 do 254 bajtów. Długość domyślna to 1 bajt.
Składnia
CHAR (liczba bajtów) FOR BIT DATA
albo
CHARACTER (liczba bajtów) FOR BIT DATA
Odpowiadający typ JDBC
java.sql.Types.BINARY
Ograniczenia
Jeśli wstawiany łańcuch bajtów krótszy niż podany, to łańcuch bajtów jest automatycznie uzupełniony wartościami bajtowymi 0x20 do podanej długości.
Gdy porównywane są dwa łańcuchy bajtowe – muszą być tej samej długości.
Wyniki operacji na CHAR FOR BIT DATA
i VARCHAR FOR BIT DATA
są zawsze typu VARCHAR FOR BIT DATA
.
Bajty wstawiamy jako liczby heksadecymalne poprzedzone prefiksem X albo x, np. X’ff’.
Do przeliczenia tablicy byte[] na liczbę heksadecymalną można użyć metody:
public static String byteArrayToHexString(byte[] bytes) { StringBuilder sb = new StringBuilder(); for(byte b : bytes){ sb.append(String.format("%02x", b)); } return sb.toString(); }
Klasa R053
package aderby.types; import aderby.DerbyUtil; import java.sql.*; public class R053_CHAR_FOR_BIT_DATA { private static final String baza = "C:/Przyklady/R053"; private static final String skrypt = "aderby/src/resources/sqls/r053.sql"; public static void main(String[] args) { DerbyUtil.startDerbyEngine(DerbyUtil.embdriver); //Utworzenie bazy i wstawienie danych Connection con = DerbyUtil.connectEmbeddedDB(baza, ";create=true"); DerbyUtil.jdbcRunScript(skrypt, con); //pobranie danych Statement stat = null; ResultSet rs = null; byte[] bytes; String n; try { stat = con.createStatement(); rs = stat.executeQuery("SELECT * FROM colors"); while (rs.next()) { n = rs.getString("name"); bytes = rs.getBytes("val"); System.out.print(n + " "); for (byte aByte : bytes) { //System.out.print(Integer.toHexString(bytes[i] & 0xff)); System.out.print(String.format("%02x", aByte)); } System.out.println(); } } catch (SQLException e) { e.printStackTrace(); } DerbyUtil.close(rs); DerbyUtil.close(stat); DerbyUtil.close(con); DerbyUtil.shutdownEmbeddedDB(baza); DerbyUtil.shutdownDerbyEngine(); } }
Plik r053.sql
CREATE TABLE colors( id INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY( START WITH 1, INCREMENT BY 1), name VARCHAR(60), val CHAR (3) FOR BIT DATA ); CREATE INDEX i_name ON colors (name ASC); INSERT INTO colors VALUES (DEFAULT, 'DeepPink', x'ff1493'); INSERT INTO colors VALUES (DEFAULT, 'OrangeRed', x'ff4500'); INSERT INTO colors VALUES (DEFAULT, 'GoldYellow', x'ffd700'); INSERT INTO colors VALUES (DEFAULT, 'Salmon', x'fa8072'); INSERT INTO colors VALUES (DEFAULT, 'BlueViolet', x'8A2be2'); INSERT INTO colors VALUES (DEFAULT, 'LimeGreen', x'32cd32'); INSERT INTO colors VALUES (DEFAULT, 'Olive', x'808000'); INSERT INTO colors VALUES (DEFAULT, 'Turquoise', x'40e0d0'); INSERT INTO colors VALUES (DEFAULT, 'RoyalBlue', x'4169E1'); INSERT INTO colors VALUES (DEFAULT, 'Maroon', x'800000');
Po uruchomieniu klasy na konsoli zobaczymy:
DeepPink ff1493 OrangeRed ff4500 GoldYellow ffd700 Salmon fa8072 BlueViolet 8a2be2 LimeGreen 32cd32 Olive 808000 Turquoise 40e0d0 RoyalBlue 4169e1 Maroon 800000
Pliki do ściągnięcia
Aktualny (tworzony narastająco) plik module-info.java
Aktualny (tworzony narastająco) plik DerbyUtil.java
Pliki tworzone narastająco zastępują poprzednie pliki o tej samej nazwie i działają dla wszystkich wcześniej opublikowanych przykładów we wszystkich wpisach w projekcie. W przypadku pliku module-info.java
może być potrzebne skreślenie niepotrzebnych wpisów.