Apache Derby: typ danych CLOB
Opis
Łańcuch znaków o długości do 2 147 483 647 znaków, czyli nieco więcej niż 1 193 046 strony znormalizowanego maszynopisu A-4
Składnia
CLOB
(liczba znaków Unicode)
albo
CHARACTER 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
- 2G – 2×1024×1024×1024 znaków
- bez podanej wartości – domyślnie 2 147 483 647 znaków
Maksymalna liczba znaków to 2G – 1 = 2 147 483 647 znaków
Odpowiadający typ Java
java.sql.Clob
Odpowiadający typ JDBC
java.sql.Types.CLOB
Przykład
Klasa R048.java
package aderby.types; import aderby.DerbyUtil; import java.io.*; import java.sql.*; public class R049_CLOB { private static final String baza = "C:/Przyklady/R049"; private static final String skrypt = "aderby/src/resources/sqls/r049.sql"; private static final String sql1 = "INSERT INTO books VALUES(DEFAULT, ?,?)"; public static void main(String[] args) { DerbyUtil.startDerbyEngine(DerbyUtil.embdriver); Connection con = DerbyUtil.connectEmbeddedDB(baza, ";create=true"); DerbyUtil.jdbcRunScript(skrypt, con); FileReader fis = null; try { fis = new FileReader("aderby/src/resources/txts/Winnetou.txt"); } catch (FileNotFoundException e1) { e1.printStackTrace(); } PreparedStatement pstm = null; try { pstm = con.prepareStatement(sql1); pstm.setString(1, "Winnetou"); pstm.setCharacterStream(2, fis); pstm.execute(); } catch (SQLException e1) { e1.printStackTrace(); } Statement stat = null; ResultSet rs = null; Clob t; Reader is = null; try { stat = con.createStatement(); rs = stat .executeQuery("SELECT * FROM books WHERE title='Winnetou'"); while (rs.next()) { t = rs.getClob("text"); is = t.getCharacterStream(); for (int i = is.read(); i != -1; i = is.read()) { System.out.print((char) i); } t.free(); } } catch (SQLException | IOException e) { e.printStackTrace(); } DerbyUtil.close(fis); DerbyUtil.close(is); DerbyUtil.close(pstm); DerbyUtil.close(rs); DerbyUtil.close(stat); DerbyUtil.close(con); DerbyUtil.shutdownEmbeddedDB(baza); DerbyUtil.shutdownDerbyEngine(); } }
Plik r049.sql
CREATE TABLE books( id INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY( START WITH 1, INCREMENT BY 1), title VARCHAR(60), text CLOB(1M) ); CREATE INDEX i_title ON books (title ASC);
Po uruchomieniu klasy zobaczymy na konsoli:
KAROL MAY WINNETOU TOM I ROZDZIAŁ I GREENHORN ..... 13088 linii tekstu ... KONIEC TOMU PIERWSZEGO
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.