Zielony Smok - logo witryny

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.