Zielony Smok - logo witryny

Apache Derby: typ danych BLOB

Opis

Łańcuch znaków o długości do 2 147 483 647 znaków, czyli 2684 obrazków o wymiarach 1000×800 pikseli.

Składnia

BLOB(liczba znaków Unicode)

albo

BINARY LARGE OBJECT(liczba znaków Unicode)

Liczba znaków może być podana jako:

  • 12235 – liczba znaków
  • 12K – 12*1024 znaków
  • 2M – 2*1024*1024 znaków
  • 1G – 1*1024*1024*1024 znaków
  • bez podanej wartości – domyślnie 2G = 2 147 483 647 znaków

Odpowiadający typ Java

java.sql.Blob

Odpowiadający typ JDBC

java.sql.Types.BLOB

Klasa R052.java
      package aderby.types;

import aderby.DerbyUtil;

import java.io.*;
import java.sql.*;
import java.util.Objects;

public class R052_BLOB {
    private static final String baza = "C:/Przyklady/R052";
    public static final String createTableObrazki = "CREATE TABLE obrazki("
            + "id INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY(START WITH 1, INCREMENT BY 1), "
            + "nazwa VARCHAR(256), obrazek BLOB)";

    public static void main(String[] args) {
        DerbyUtil.startDerbyEngine(DerbyUtil.embdriver);
        Connection con = DerbyUtil.connectEmbeddedDB(baza, ";create=true");
        Statement stat = null;
        ResultSet rs;
        try {
            stat = con.createStatement();
            stat.execute(createTableObrazki);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        DerbyUtil.imagesToDerby(con, "aderby/src/resources/karty", ".jpg");
        String nazwa;
        Blob bl = null;
        File file;
        InputStream is = null;
        FileOutputStream fos = null;
        try {
            rs = Objects.requireNonNull(stat).executeQuery("SELECT * FROM obrazki WHERE nazwa='AW2.jpg'");
            while (rs.next()) {
                nazwa = rs.getString("nazwa");
                bl = rs.getBlob("obrazek");
                file = new File("C:/Przyklady/" + nazwa);
                is = bl.getBinaryStream();
                try {
                    fos = new FileOutputStream(file);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                DerbyUtil.copyStream2(is, fos);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (bl != null) {
                try {
                    bl.free();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        DerbyUtil.close(is);
        DerbyUtil.close(fos);
        DerbyUtil.close(stat);
        DerbyUtil.close(con);
        DerbyUtil.shutdownEmbeddedDB(baza);
        DerbyUtil.shutdownDerbyEngine();
    }
}
Klasa Multifilter.java
package aderby;

import java.io.*;
import java.util.*;

@SuppressWarnings("MismatchedReadAndWriteOfArray")
public class MultiFilter implements FilenameFilter {
    private final String[] exts;
    private final String[] lowerExts;

    public MultiFilter(File dir, String... exts) {
        if (exts == null || exts.length == 0)
            throw new IllegalArgumentException(
                    "musisz poda\u0107 przynajmniej jedno nie-puste rozszerzenie");
        String[] as;
        int k = (as = exts).length;
        for (int j = 0; j < k; j++) {
            String i = as[j];
            if (i == null || i.length() == 0)
                throw new IllegalArgumentException(
                        "argument nie mo\u017Ce  by\u0107 ani 'null' ani 'pusty' ");
        }
        this.exts = new String[exts.length];
        lowerExts = new String[exts.length];
        for (int i = 0; i < exts.length; i++) {
            this.exts[i] = exts[i];
            lowerExts[i] = exts[i].toLowerCase(Locale.ENGLISH);
        }
    }

    @Override
    public boolean accept(File dir, String s) {
        for (int i = 0; i < lowerExts.length; i++)
            if (s.endsWith(exts[i]))
                return true;
        return false;
    }
}

Po uruchomieniu klasy w folderze C:/Przyklady pojawi się baza danych zawierająca 10 obrazków w postaci obiektów BLOB oraz plik obrazka AW2.jpg, który został z bazy pobrany jako obiekt BLOB, a następnie zapisany do pliku.

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.