Úvod do Javy, JDBC a multimediální databáze

Podobné dokumenty
Úvod do Javy, JDBC a multimediální databáze

Algoritmizace a programování

Programování v Javě I. Leden 2008

Programování v Javě I. Únor 2009

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Seminář Java II p.1/43

Semináˇr Java X JDBC Semináˇr Java X p.1/25

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Úvod do programovacích jazyků (Java)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Typ 2 - připojení prostřednictvím kódu nativního klienta pro přístup k síti

Tvorba informačních systémů

Teoretické minimum z PJV

Úvod do programovacích jazyků (Java)

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Z. Kotala, P. Toman: Java ( Obsah )

Java Výjimky Java, zimní semestr

1. Téma 12 - Textové soubory a výjimky

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Návrh a tvorba WWW stránek 1/14. PHP a databáze

RMI Remote Method Invocation

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Zápis programu v jazyce C#

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Úvod do programování v jazyce Java

Java a XML. 10/26/09 1/7 Java a XML

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Generické programování

Proměnné a datové typy

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

KTE / ZPE Informační technologie

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

8 Třídy, objekty, metody, předávání argumentů metod

Abstraktní datové typy: zásobník

Soubor jako posloupnost bytů

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

Java a Caché IV: Manipulace s objekty

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

Prostorové a XML databáze

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Úvod do programovacích jazyků (Java)

4. lekce Přístup k databázi z vyššího programovacího jazyka

Optimalizace dotazů a databázové transakce v Oracle

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

Typický prvek kolekce pro české řazení

Úvod do programování - Java. Cvičení č.4

typová konverze typová inference

7. Datové typy v Javě

Vláknové programování část V

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

KTE / ZPE Informační technologie

První kapitola úvod do problematiky

1. Programování proti rozhraní

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

Tvorba informačních systémů

Regulární výrazy. Vzory

Java - výjimky. private void vstup() throws IOException {... }

Embedded SQL v C/C++ úvod. Administrace Oracle Kateřina Opočenská

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

17. Projekt Trojúhelníky

Databáze I. Přednáška 7

Objektově orientované programování v PHP 5. Martin Klíma

Vytváření a použití knihoven tříd

3 KTE / ZPE Informační technologie

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

20. Projekt Domácí mediotéka

Výčtový typ strana 67

Object-relational mapping (JPA, Hibernate)

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

KMI / TMA Tvorba mobilních aplikací. 6. seminář ZS 2016/2017 Středa 13:15-15:45

KIV/PIA 2013 Jan Tichava

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

Jazyk C# (seminář 6)

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

8. přednáška: Soubory a proudy

O Apache Derby detailněji. Hynek Mlnařík

Prostorové a XML databáze

6. PRÁCE S DATOVÝMI PROUDY

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

Jalapeño: pekelně ostrá Java persistence v Caché. Daniel Kutáč Senior Sales Engineer

Algoritmizace a programování

Michal Krátký, Miroslav Beneš

Projekty pro výuku programování v jazyce Java

Jazyk C# - přístup k datům

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

Textové soubory. alg9 1

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Transkript:

Úvod do Javy, JDBC a multimediální databáze Marek Rychlý Vysoké učení technické v Brně Fakulta informačních technologií Ústav informačních systémů 1. demonstrační cvičení pro PDB 2. říjen 2015 Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 1 / 40

Obsah 1 Java, JDBC a připojení k Oracle Database 2 Uložení multimédií Práce s multimédii vč. vyhledávání Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 2 / 40

Cíle cvičení. Ukázka práce s JDBC, připojení na Oracle Database. Ukázka uložení multimédií v. Ukázka práce s multimédii přes Oracle JDBC vč. vyhledávání. Diskuze k zadání projektu a způsobu řešení. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 3 / 40

Cíle cvičení. Ukázka práce s JDBC, připojení na Oracle Database. Ukázka uložení multimédií v. Ukázka práce s multimédii přes Oracle JDBC vč. vyhledávání. Diskuze k zadání projektu a způsobu řešení. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 3 / 40

Cíle cvičení. Ukázka práce s JDBC, připojení na Oracle Database. Ukázka uložení multimédií v. Ukázka práce s multimédii přes Oracle JDBC vč. vyhledávání. Diskuze k zadání projektu a způsobu řešení. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 3 / 40

Cíle cvičení. Ukázka práce s JDBC, připojení na Oracle Database. Ukázka uložení multimédií v. Ukázka práce s multimédii přes Oracle JDBC vč. vyhledávání. Diskuze k zadání projektu a způsobu řešení. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 3 / 40

Cíle cvičení. Ukázka práce s JDBC, připojení na Oracle Database. Ukázka uložení multimédií v. Ukázka práce s multimédii přes Oracle JDBC vč. vyhledávání. Diskuze k zadání projektu a způsobu řešení. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 3 / 40

Obsah Java, JDBC a připojení k Oracle Database 1 Java, JDBC a připojení k Oracle Database 2 Uložení multimédií Práce s multimédii vč. vyhledávání Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 4 / 40

Platforma Java a její edice Java ME (Micro Edition) pro zařízení s omezenou kapacitou (např. mobilní zařízení), Java SE (Standard Edition) pro obecné použití na desktopech a serverech (základní knihovny), Java EE (Enterprise Edition) rozšířená Java SE o technologie pro vícevrstvé serverové aplikace. Do Java SE 5 (vývoj. verze 1.5) označení edicí J2ME, J2SE a J2EE. Aktuální verze jsou Java SE 8 (vývoj. verze 1.8) a Java EE 7. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 5 / 40

Platforma Java a její edice Java ME (Micro Edition) pro zařízení s omezenou kapacitou (např. mobilní zařízení), Java SE (Standard Edition) pro obecné použití na desktopech a serverech (základní knihovny), Java EE (Enterprise Edition) rozšířená Java SE o technologie pro vícevrstvé serverové aplikace. Do Java SE 5 (vývoj. verze 1.5) označení edicí J2ME, J2SE a J2EE. Aktuální verze jsou Java SE 8 (vývoj. verze 1.8) a Java EE 7. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 5 / 40

Vlastnosti jazyka Java Objektově-orientovaný jazyk, podobně jako C++, ale... Přidělování a uvolňování paměti je zde obstaráno automaticky. (objekt, na který neexistují reference, může být zrušen garbage collectorem) Nejsou ukazatele, jen hodnoty a reference na objekty. (nelze ukazovat mimo platná data, ale pozor na přístup do neexistujících objektů) Mechanismus výjimek, runtime chyby je možné odchytit a zpracovat. (výjimky jsou objekty, specializací tříd výjimek tvoří hierarchii) Mechanismus vláken (threads) a jejich synchronizace pomocí monitorů. Lze dynamicky zavádět třídy, vytvářet objekty a provádět jejich reflexi. Statická typová kontrola (norma IEEE). (stejný výsledek v různých OS, používá Unicode) Překládaná se do bytecodu, interpretuje v JVM. (nezávislost na HW/OS platformě, systémových knihovnách, atd.) Velké množství standardních knihoven. (GUI, I/O, komunikace s RDBS, práce s textem, s komprimovanými soubory, atd.) Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 6 / 40

Vlastnosti jazyka Java Objektově-orientovaný jazyk, podobně jako C++, ale... Přidělování a uvolňování paměti je zde obstaráno automaticky. (objekt, na který neexistují reference, může být zrušen garbage collectorem) Nejsou ukazatele, jen hodnoty a reference na objekty. (nelze ukazovat mimo platná data, ale pozor na přístup do neexistujících objektů) Mechanismus výjimek, runtime chyby je možné odchytit a zpracovat. (výjimky jsou objekty, specializací tříd výjimek tvoří hierarchii) Mechanismus vláken (threads) a jejich synchronizace pomocí monitorů. Lze dynamicky zavádět třídy, vytvářet objekty a provádět jejich reflexi. Statická typová kontrola (norma IEEE). (stejný výsledek v různých OS, používá Unicode) Překládaná se do bytecodu, interpretuje v JVM. (nezávislost na HW/OS platformě, systémových knihovnách, atd.) Velké množství standardních knihoven. (GUI, I/O, komunikace s RDBS, práce s textem, s komprimovanými soubory, atd.) Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 6 / 40

Vlastnosti jazyka Java Objektově-orientovaný jazyk, podobně jako C++, ale... Přidělování a uvolňování paměti je zde obstaráno automaticky. (objekt, na který neexistují reference, může být zrušen garbage collectorem) Nejsou ukazatele, jen hodnoty a reference na objekty. (nelze ukazovat mimo platná data, ale pozor na přístup do neexistujících objektů) Mechanismus výjimek, runtime chyby je možné odchytit a zpracovat. (výjimky jsou objekty, specializací tříd výjimek tvoří hierarchii) Mechanismus vláken (threads) a jejich synchronizace pomocí monitorů. Lze dynamicky zavádět třídy, vytvářet objekty a provádět jejich reflexi. Statická typová kontrola (norma IEEE). (stejný výsledek v různých OS, používá Unicode) Překládaná se do bytecodu, interpretuje v JVM. (nezávislost na HW/OS platformě, systémových knihovnách, atd.) Velké množství standardních knihoven. (GUI, I/O, komunikace s RDBS, práce s textem, s komprimovanými soubory, atd.) Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 6 / 40

Vlastnosti jazyka Java Objektově-orientovaný jazyk, podobně jako C++, ale... Přidělování a uvolňování paměti je zde obstaráno automaticky. (objekt, na který neexistují reference, může být zrušen garbage collectorem) Nejsou ukazatele, jen hodnoty a reference na objekty. (nelze ukazovat mimo platná data, ale pozor na přístup do neexistujících objektů) Mechanismus výjimek, runtime chyby je možné odchytit a zpracovat. (výjimky jsou objekty, specializací tříd výjimek tvoří hierarchii) Mechanismus vláken (threads) a jejich synchronizace pomocí monitorů. Lze dynamicky zavádět třídy, vytvářet objekty a provádět jejich reflexi. Statická typová kontrola (norma IEEE). (stejný výsledek v různých OS, používá Unicode) Překládaná se do bytecodu, interpretuje v JVM. (nezávislost na HW/OS platformě, systémových knihovnách, atd.) Velké množství standardních knihoven. (GUI, I/O, komunikace s RDBS, práce s textem, s komprimovanými soubory, atd.) Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 6 / 40

Vlastnosti jazyka Java Objektově-orientovaný jazyk, podobně jako C++, ale... Přidělování a uvolňování paměti je zde obstaráno automaticky. (objekt, na který neexistují reference, může být zrušen garbage collectorem) Nejsou ukazatele, jen hodnoty a reference na objekty. (nelze ukazovat mimo platná data, ale pozor na přístup do neexistujících objektů) Mechanismus výjimek, runtime chyby je možné odchytit a zpracovat. (výjimky jsou objekty, specializací tříd výjimek tvoří hierarchii) Mechanismus vláken (threads) a jejich synchronizace pomocí monitorů. Lze dynamicky zavádět třídy, vytvářet objekty a provádět jejich reflexi. Statická typová kontrola (norma IEEE). (stejný výsledek v různých OS, používá Unicode) Překládaná se do bytecodu, interpretuje v JVM. (nezávislost na HW/OS platformě, systémových knihovnách, atd.) Velké množství standardních knihoven. (GUI, I/O, komunikace s RDBS, práce s textem, s komprimovanými soubory, atd.) Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 6 / 40

Vlastnosti jazyka Java Objektově-orientovaný jazyk, podobně jako C++, ale... Přidělování a uvolňování paměti je zde obstaráno automaticky. (objekt, na který neexistují reference, může být zrušen garbage collectorem) Nejsou ukazatele, jen hodnoty a reference na objekty. (nelze ukazovat mimo platná data, ale pozor na přístup do neexistujících objektů) Mechanismus výjimek, runtime chyby je možné odchytit a zpracovat. (výjimky jsou objekty, specializací tříd výjimek tvoří hierarchii) Mechanismus vláken (threads) a jejich synchronizace pomocí monitorů. Lze dynamicky zavádět třídy, vytvářet objekty a provádět jejich reflexi. Statická typová kontrola (norma IEEE). (stejný výsledek v různých OS, používá Unicode) Překládaná se do bytecodu, interpretuje v JVM. (nezávislost na HW/OS platformě, systémových knihovnách, atd.) Velké množství standardních knihoven. (GUI, I/O, komunikace s RDBS, práce s textem, s komprimovanými soubory, atd.) Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 6 / 40

Vlastnosti jazyka Java Objektově-orientovaný jazyk, podobně jako C++, ale... Přidělování a uvolňování paměti je zde obstaráno automaticky. (objekt, na který neexistují reference, může být zrušen garbage collectorem) Nejsou ukazatele, jen hodnoty a reference na objekty. (nelze ukazovat mimo platná data, ale pozor na přístup do neexistujících objektů) Mechanismus výjimek, runtime chyby je možné odchytit a zpracovat. (výjimky jsou objekty, specializací tříd výjimek tvoří hierarchii) Mechanismus vláken (threads) a jejich synchronizace pomocí monitorů. Lze dynamicky zavádět třídy, vytvářet objekty a provádět jejich reflexi. Statická typová kontrola (norma IEEE). (stejný výsledek v různých OS, používá Unicode) Překládaná se do bytecodu, interpretuje v JVM. (nezávislost na HW/OS platformě, systémových knihovnách, atd.) Velké množství standardních knihoven. (GUI, I/O, komunikace s RDBS, práce s textem, s komprimovanými soubory, atd.) Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 6 / 40

Vlastnosti jazyka Java Objektově-orientovaný jazyk, podobně jako C++, ale... Přidělování a uvolňování paměti je zde obstaráno automaticky. (objekt, na který neexistují reference, může být zrušen garbage collectorem) Nejsou ukazatele, jen hodnoty a reference na objekty. (nelze ukazovat mimo platná data, ale pozor na přístup do neexistujících objektů) Mechanismus výjimek, runtime chyby je možné odchytit a zpracovat. (výjimky jsou objekty, specializací tříd výjimek tvoří hierarchii) Mechanismus vláken (threads) a jejich synchronizace pomocí monitorů. Lze dynamicky zavádět třídy, vytvářet objekty a provádět jejich reflexi. Statická typová kontrola (norma IEEE). (stejný výsledek v různých OS, používá Unicode) Překládaná se do bytecodu, interpretuje v JVM. (nezávislost na HW/OS platformě, systémových knihovnách, atd.) Velké množství standardních knihoven. (GUI, I/O, komunikace s RDBS, práce s textem, s komprimovanými soubory, atd.) Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 6 / 40

Vlastnosti jazyka Java Objektově-orientovaný jazyk, podobně jako C++, ale... Přidělování a uvolňování paměti je zde obstaráno automaticky. (objekt, na který neexistují reference, může být zrušen garbage collectorem) Nejsou ukazatele, jen hodnoty a reference na objekty. (nelze ukazovat mimo platná data, ale pozor na přístup do neexistujících objektů) Mechanismus výjimek, runtime chyby je možné odchytit a zpracovat. (výjimky jsou objekty, specializací tříd výjimek tvoří hierarchii) Mechanismus vláken (threads) a jejich synchronizace pomocí monitorů. Lze dynamicky zavádět třídy, vytvářet objekty a provádět jejich reflexi. Statická typová kontrola (norma IEEE). (stejný výsledek v různých OS, používá Unicode) Překládaná se do bytecodu, interpretuje v JVM. (nezávislost na HW/OS platformě, systémových knihovnách, atd.) Velké množství standardních knihoven. (GUI, I/O, komunikace s RDBS, práce s textem, s komprimovanými soubory, atd.) Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 6 / 40

Struktura zdrojového souboru package cz. v u t b r. f i t. pdb. demo1. java ; / / d i r " cz / v u t b r / f i t / pdb / demo1 / java " import java. i o. P r i n t W r i t e r ; interface Test { / no modifier => package p r i v a t e / public i n t t e s t ( P r i n t W r i t e r w r i t e r ) ; } class MyTest implements Test { private S t r i n g getmessage ( ) { / p r i v a t e => class p r i v a t e / return new S t r i n g ( " Hello, t h i s i s MyTest. t e s t method! " ) ; } public i n t t e s t ( P r i n t W r i t e r w r i t e r ) { w r i t e r. p r i n t l n ( this. getmessage ( ) ) ; return 123; } } public class Demo1Java { / / the filename should by " Demo1Java. java " public s t a t i c void main ( String args [ ] ) { i n t r e t V a l ; MyTest mytest = new MyTest ( ) ; r e t V a l = mytest. t e s t (new P r i n t W r i t e r ( System. out, true ) ) ; System. e r r. p r i n t l n ( " MyTest. t e s t r e t u r n s " + r e t V a l ) ; } } Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 7 / 40

Překlad zdrojového souboru a spuštění 1 Přepnout se do adresáře, kde začíná cesta podle balíku. (např. cd./pdb/demo1) 2 Přeložit zdrojové soubory na bytecode. (javac -classpath. cz/vutbr/fit/pdb/demo1/java/demo1java.java) 3 Spustit bytecode třídy s metodou main(...). (java -classpath. cz.vutbr.fit.pdb.demo1.java.demo1java) Předchozí příklad: $ javac classpath. cz / v u t b r / f i t / pdb / demo1 / java / Demo1Java. java $ java classpath. cz. v u t b r. f i t. pdb. demo1. java. Demo1Java Hello, t h i s i s MyTest. t e s t method! MyTest. t e s t r e t u r n s 123 Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 8 / 40

Jazyk Java Java, JDBC a připojení k Oracle Database Operátory jako v C++ (ale pouze rozšiřující auto-přetypování) Programové struktury jako v C++ (if, switch, for, do, while, break, continue, return, try, catch, finally, throw, synchronized) Datové typy... objektové (třídy) (Integer, String, InputStream, Image,... ) nebo jednoduché (byte, short, int, long, char (Unicode), float, double, boolean) Pole: int[][][] pole = new int[10][5][]; Klíčová slova pro... objekty: new, null, this, super třídy a rozhraní: class, interface, implements, abstract omezení přístupu: private, protected, public omezení platnosti: static, final atd. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 9 / 40

Jazyk Java Java, JDBC a připojení k Oracle Database Operátory jako v C++ (ale pouze rozšiřující auto-přetypování) Programové struktury jako v C++ (if, switch, for, do, while, break, continue, return, try, catch, finally, throw, synchronized) Datové typy... objektové (třídy) (Integer, String, InputStream, Image,... ) nebo jednoduché (byte, short, int, long, char (Unicode), float, double, boolean) Pole: int[][][] pole = new int[10][5][]; Klíčová slova pro... objekty: new, null, this, super třídy a rozhraní: class, interface, implements, abstract omezení přístupu: private, protected, public omezení platnosti: static, final atd. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 9 / 40

Jazyk Java Java, JDBC a připojení k Oracle Database Operátory jako v C++ (ale pouze rozšiřující auto-přetypování) Programové struktury jako v C++ (if, switch, for, do, while, break, continue, return, try, catch, finally, throw, synchronized) Datové typy... objektové (třídy) (Integer, String, InputStream, Image,... ) nebo jednoduché (byte, short, int, long, char (Unicode), float, double, boolean) Pole: int[][][] pole = new int[10][5][]; Klíčová slova pro... objekty: new, null, this, super třídy a rozhraní: class, interface, implements, abstract omezení přístupu: private, protected, public omezení platnosti: static, final atd. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 9 / 40

Jazyk Java Java, JDBC a připojení k Oracle Database Operátory jako v C++ (ale pouze rozšiřující auto-přetypování) Programové struktury jako v C++ (if, switch, for, do, while, break, continue, return, try, catch, finally, throw, synchronized) Datové typy... objektové (třídy) (Integer, String, InputStream, Image,... ) nebo jednoduché (byte, short, int, long, char (Unicode), float, double, boolean) Pole: int[][][] pole = new int[10][5][]; Klíčová slova pro... objekty: new, null, this, super třídy a rozhraní: class, interface, implements, abstract omezení přístupu: private, protected, public omezení platnosti: static, final atd. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 9 / 40

Jazyk Java Java, JDBC a připojení k Oracle Database Operátory jako v C++ (ale pouze rozšiřující auto-přetypování) Programové struktury jako v C++ (if, switch, for, do, while, break, continue, return, try, catch, finally, throw, synchronized) Datové typy... objektové (třídy) (Integer, String, InputStream, Image,... ) nebo jednoduché (byte, short, int, long, char (Unicode), float, double, boolean) Pole: int[][][] pole = new int[10][5][]; Klíčová slova pro... objekty: new, null, this, super třídy a rozhraní: class, interface, implements, abstract omezení přístupu: private, protected, public omezení platnosti: static, final atd. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 9 / 40

Jazyk Java Java, JDBC a připojení k Oracle Database Operátory jako v C++ (ale pouze rozšiřující auto-přetypování) Programové struktury jako v C++ (if, switch, for, do, while, break, continue, return, try, catch, finally, throw, synchronized) Datové typy... objektové (třídy) (Integer, String, InputStream, Image,... ) nebo jednoduché (byte, short, int, long, char (Unicode), float, double, boolean) Pole: int[][][] pole = new int[10][5][]; Klíčová slova pro... objekty: new, null, this, super třídy a rozhraní: class, interface, implements, abstract omezení přístupu: private, protected, public omezení platnosti: static, final atd. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 9 / 40

Jazyk Java Java, JDBC a připojení k Oracle Database Operátory jako v C++ (ale pouze rozšiřující auto-přetypování) Programové struktury jako v C++ (if, switch, for, do, while, break, continue, return, try, catch, finally, throw, synchronized) Datové typy... objektové (třídy) (Integer, String, InputStream, Image,... ) nebo jednoduché (byte, short, int, long, char (Unicode), float, double, boolean) Pole: int[][][] pole = new int[10][5][]; Klíčová slova pro... objekty: new, null, this, super třídy a rozhraní: class, interface, implements, abstract omezení přístupu: private, protected, public omezení platnosti: static, final atd. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 9 / 40

Jazyk Java Java, JDBC a připojení k Oracle Database Operátory jako v C++ (ale pouze rozšiřující auto-přetypování) Programové struktury jako v C++ (if, switch, for, do, while, break, continue, return, try, catch, finally, throw, synchronized) Datové typy... objektové (třídy) (Integer, String, InputStream, Image,... ) nebo jednoduché (byte, short, int, long, char (Unicode), float, double, boolean) Pole: int[][][] pole = new int[10][5][]; Klíčová slova pro... objekty: new, null, this, super třídy a rozhraní: class, interface, implements, abstract omezení přístupu: private, protected, public omezení platnosti: static, final atd. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 9 / 40

Jazyk Java Java, JDBC a připojení k Oracle Database Operátory jako v C++ (ale pouze rozšiřující auto-přetypování) Programové struktury jako v C++ (if, switch, for, do, while, break, continue, return, try, catch, finally, throw, synchronized) Datové typy... objektové (třídy) (Integer, String, InputStream, Image,... ) nebo jednoduché (byte, short, int, long, char (Unicode), float, double, boolean) Pole: int[][][] pole = new int[10][5][]; Klíčová slova pro... objekty: new, null, this, super třídy a rozhraní: class, interface, implements, abstract omezení přístupu: private, protected, public omezení platnosti: static, final atd. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 9 / 40

Jazyk Java Java, JDBC a připojení k Oracle Database Operátory jako v C++ (ale pouze rozšiřující auto-přetypování) Programové struktury jako v C++ (if, switch, for, do, while, break, continue, return, try, catch, finally, throw, synchronized) Datové typy... objektové (třídy) (Integer, String, InputStream, Image,... ) nebo jednoduché (byte, short, int, long, char (Unicode), float, double, boolean) Pole: int[][][] pole = new int[10][5][]; Klíčová slova pro... objekty: new, null, this, super třídy a rozhraní: class, interface, implements, abstract omezení přístupu: private, protected, public omezení platnosti: static, final atd. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 9 / 40

Jazyk Java Java, JDBC a připojení k Oracle Database Operátory jako v C++ (ale pouze rozšiřující auto-přetypování) Programové struktury jako v C++ (if, switch, for, do, while, break, continue, return, try, catch, finally, throw, synchronized) Datové typy... objektové (třídy) (Integer, String, InputStream, Image,... ) nebo jednoduché (byte, short, int, long, char (Unicode), float, double, boolean) Pole: int[][][] pole = new int[10][5][]; Klíčová slova pro... objekty: new, null, this, super třídy a rozhraní: class, interface, implements, abstract omezení přístupu: private, protected, public omezení platnosti: static, final atd. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 9 / 40

Jazyk Java Java, JDBC a připojení k Oracle Database Operátory jako v C++ (ale pouze rozšiřující auto-přetypování) Programové struktury jako v C++ (if, switch, for, do, while, break, continue, return, try, catch, finally, throw, synchronized) Datové typy... objektové (třídy) (Integer, String, InputStream, Image,... ) nebo jednoduché (byte, short, int, long, char (Unicode), float, double, boolean) Pole: int[][][] pole = new int[10][5][]; Klíčová slova pro... objekty: new, null, this, super třídy a rozhraní: class, interface, implements, abstract omezení přístupu: private, protected, public omezení platnosti: static, final atd. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 9 / 40

Konvence pro zdrojový kód v Javě Správné názvy a koncovky zdrojových souborů, obsah v UTF-8. (Java source *.java vs. bytecode *.class, balíky cz.vutbr.fit.pdb... ) Zarovnání kódu s každým blokem {...} nebo zalomením řádku. (odsazovat o tabulátor, případně 4 nebo 8 mezer) Správná velikost písmen v názvech identifikátorů. balíky jen malá písmena, složená jména odděleny tečkou (např. java.io, cz.vutbr.fit.pdb.demo1) třídy, rozhraní a konstruktory slova začínají velkým písmenem (např. String, StringBuffer) metody a proměnné první slovo začíná malým, další velkým pís. (např. reader, getsize(), mywidth) konstanty jen velká písmena, složená jména odděleny _ (např. MIN_WIDTH,... ; deklarovat jako static final) Strukturované komentáře pro JavaDoc. (např. @param nazev komentar, @return komentar, @throws trida komentar, @author jmeno, @version oznaceni; komentář uvodit /**... ) Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 10 / 40

Literatura k Javě Java, JDBC a připojení k Oracle Database Zdeněk Kotala, Petr Toman: Java. http://janoud.cz/sub/vyuka/java/javazcun.htm Bruce Eckel: Thinking in Java. ISBN 0131872486 http://mindview.net/books/tij4 Oracle: Java SE Documentation. http://www.oracle.com/technetwork/java/javase/documentation/ Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 11 / 40

Aplikační API pro volání SQL příkazů a dotazů. (unifikovaný přístup k databázím) Pro přístup k databázi z Java SE/EE aplikace. Pro konkrétní databázi je potřeba JDBC ovladač. (pro vytvoření spojení, pro dotazy a data specifické pro danou databázi) JDBC API je nezávislé na konkrétním systému řízení báze dat. (problém s kompatibilitou může být na úrovni jazyka SQL) Nejen pro přístup k RDBS, ale k libovolným sloupcovým datům. (např. tabulkové soubory, textové soubory, atd.) Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 12 / 40

Struktura zdrojového souboru s JDBC I package cz. v u t b r. f i t. pdb. demo1. jdbc ; import oracle. jdbc. pool. OracleDataSource ; import java. sql. Connection ; import java. sql. Statement ; import java. s q l. ResultSet ; import java. sql. SQLException ; class Demo1JDBC { public s t a t i c void main ( String args [ ] ) { t r y { / / create a OracleDataSource instance OracleDataSource ods = new OracleDataSource ( ) ; ods. seturl ( " jdbc : oracle : t h i n : @gort. f i t. v u t b r. cz :1521: dbgort " ) ; ods. setuser ( System. getproperty ( " l o g i n " ) ) ; ods. setpassword ( System. getproperty ( " password " ) ) ; / / connect to the database Connection conn = ods. getconnection ( ) ; t r y { / / create a Statement Statement stmt = conn. createstatement ( ) ; t r y { / / select something from the system s dual table ResultSet r s e t = stmt. executequery ( Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 13 / 40

Struktura zdrojového souboru s JDBC II } " select 1+2 as col1, 3 4 as col2 from dual " ) ; t r y { / / i t e r a t e through the r e s u l t and p r i n t the values while ( r s e t. next ( ) ) { System. out. p r i n t l n ( " col1 : " + r s e t. g e t S t r i n g ( 1 ) + " \ t c o l 2 : " + r s e t. g e t S t r i n g ( 2 ) + " " ) ; } } f i n a l l y { r s e t. close ( ) ; / / close the ResultSet } } f i n a l l y { stmt. close ( ) ; / / close the Statement } } f i n a l l y { conn. close ( ) ; / / close the connection } } catch ( SQLException sqlex ) { System. e r r. p r i n t l n ( " SQLException : " + sqlex. getmessage ( ) ) ; } } Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 14 / 40

Překlad s JDBC a spuštění 1 Získat ovladač JDBC pro Oracle Database 12c pro Java 7/8. (http://www.oracle.com/technetwork/database/features/jdbc/ default-2280470.html) 2 Ovladač přidat do CLASSPATH pro překlad a spuštění. (javac -classpath.:./lib/ojdbc7.jar... ) 3 V kódu odchytávat výjimky, uvolnit všechny alokované prostředky a uzavřít otevřená spojení. (pomocí catch a finally) Předchozí příklad: $ javac classpath. :. / l i b / ojdbc7. j a r \ cz / v u t b r / f i t / pdb / demo1 / jdbc /Demo1JDBC. java $ java classpath. :. / l i b / ojdbc7. j a r \ Dlogin=xnovak99 Dpassword= \ cz. v u t b r. f i t. pdb. demo1. jdbc.demo1jdbc col1 : 3 col2 : 1 Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 15 / 40

Transakce a příprava dotazů Je možno vypnout automatické ukončení transakcí a dělat ručně. (conn.setautocommit(false) a následně conn.commit()) U transakcí je možno vytvářet záchytné body... (např. Savepoint svpt1 = conn.setsavepoint("sp1"))... a následně se k bodům vracet. (např. conn.rollback(svpt1)) Je možno předpřipravit dotaz a pak doplňovat hodnoty. (zabrání útokům typu SQL injection) S t r i n g updatesql = " update COFFEES set SALES =? where COF_NAME l i k e? " ; PreparedStatement pstmt = conn. preparestatement ( updatesql ) ; pstmt. s e t I n t ( 1, 7 5 ) ; pstmt. s e t S t r i n g ( 2, " Colombian " ) ; pstmt. executeupdate ( ) ; pstmt. close ( ) ; Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 16 / 40

Literatura JDBC na Oracle Database Trail: JDBC Database Access. http://download.oracle.com/javase/tutorial/jdbc/ JDK 7 JDBC-related APIs & Developer Guides. http://download.oracle.com/javase/7/docs/technotes/guides/jdbc/ Jan Šeda: Úvod do JDBC. Interval.cz. http://interval.cz/clanky/uvod-do-jdbc/ JDBC FI WIKI. http://kore.fi.muni.cz/wiki/index.php/jdbc Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 17 / 40

Obsah Java, JDBC a připojení k Oracle Database Uložení multimédií Práce s multimédii vč. vyhledávání 1 Java, JDBC a připojení k Oracle Database 2 Uložení multimédií Práce s multimédii vč. vyhledávání Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 18 / 40

Uložení multimédií Práce s multimédii vč. vyhledávání Podpora pro správu multimediálních dat. (doplněk tradičních databázových systémů ) post-relační databáze) Zaručují konzistenci, souběžnost, integritu. (nutné pro bezpečnost a dostupnost dat) Manipulace s multimediálními daty. (změna velikosti obrázků, transformace, atp.) Dotazování a získávání relevantních informací z velkých kolekcí dat. (dle popisu, dle multimediálního obsahu, dle vlastností objektů) Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 19 / 40

Oracle Multimedia architektura Uložení multimédií Práce s multimédii vč. vyhledávání Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 20 / 40

Multimediální data v Oracle Uložení multimédií Práce s multimédii vč. vyhledávání A) Nestrukturovaná multimédia (typy sloupců, v prostoru ORDSYS): OrdImage obrázková data (rozměry, formát souboru a obsahu, komprese; vč. metod pro manipulaci) SI_StillImage obrázková data, SQL/MM Still Image standard (pro dotazování na obsah, tzv. image matching ; bez manipulace) OrdAudio audio data (kódování, počet kanálů, velikost a frekvence vzorků, typ komprese, délka) OrdVideo video data (rozměry, rozlišení a počet snímků, délka, komprese, počet barev, bit-rate) OrdDoc libovolné multimédia (text, obrázek, audio a video) B) Meta-data k multimediálním datům. (Exif, ID3, DICOM, MPEG-7,... ) Podporuje většinu formátů (JPEG, MPEG, QT, RM,... ). Manipulace, zpracování obrazu, komprese,... Rozšiřitelné o práci s medicínskými daty, zpracování řeči, atd. Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 21 / 40

SQL/MM Still Image Standard Uložení multimédií Práce s multimédii vč. vyhledávání Standard ISO/IEC 13249-5:2001 SQL MM Part5: StillImage. (zaveden v Oracle 10g, dřívější OrdImageSignature je od Oracle 11g zavržen) Umožňuje uložit obrázek z dat typu BLOB do dat typu SI_StillImage. (z takových dat lze získat SI_... funkcemi výšku, šířku či formát obrázku, BLOB obsah či SI_StillImage náhled daných rozměrů) Poskytuje SI_... objekty zachycující charakteristiku obrázku: SI_AverageColor průměrná (celková) barva obrázku SI_ColorHistogram histogram (statistické rozložení) barev obrázku SI_PositionalColor umístění (nejvýznamnějších) barev v obrázku SI_Texture opakující se vzory, variace kontrastu a směry v obrázku Možno sestavit objekt SI_FeatureList kombinující výše uvedené charakteristiky obrázku s danými vahami (váhy 0,0 až 1,0 pro každou). Funkce SI_ScoreByFtrList vyhodnotí, jak pasuje daná kombinace charakteristik SI_FeatureList na daný obrázek SI_StillImage. (používá se pro hledání podobných obrázků, jak bude popsáno dále) Databáze neumí úpravy SI_StillImage obrázku a nenabízí Java API. (na rozdíl od obrázků v OrdImage, které lze otáčet, měnit velikost, atp.) Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 22 / 40

Uložení multimédií Práce s multimédii vč. vyhledávání Tvorba tabulky obrázků a generování charakteristik DROP TABLE products ; CREATE TABLE products ( i d integer primary key, photo ORDSYS. ORDImage, photo_si ORDSYS. SI_ StillImage, photo_ac ORDSYS. SI_AverageColor, photo_ch ORDSYS. SI_ColorHistogram, photo_pc ORDSYS. SI_ PositionalColor, photo_tx ORDSYS. SI_Texture ) ; CREATE OR REPLACE PROCEDURE products_generatefeatures IS cursor c i s select from products f o r update ; s i ORDSYS. SI_ StillImage ; BEGIN f o r cp in c loop s i := new S I _ S t i l l I m a g e ( cp. photo. getcontent ( ) ) ; update products p set photo_si = si, photo_ac = SI_AverageColor ( s i ), photo_ch = SI_ColorHistogram ( s i ), photo_pc = SI_ PositionalColor ( s i ), photo_tx = SI_Texture ( s i ) where p. i d = cp. i d ; end loop ; END; / 1 Získáme obrázek a jeho charakteristiky do proměnných pomocí select...for update. 2 Použijeme konstruktory objektů SI_... na BLOB obrázku. 3 Uložíme takto získané charakteristiky zpět do tabulky k danému obrázku. (např. pomocí products_generatefeatures, ale lepší přímo v Javě při vkládání obrázků) Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 23 / 40

Uložení multimédií Práce s multimédii vč. vyhledávání Práce s objekty Oracle Multimedia v Javě ORDSYS.ORDImage (DB) vs. oracle.ord.im.ordimage (Java) objekt: OrdImage je Java objekt. OrdImage je proxy pro databázový objekt. OrdImage musí být vytvořeno z db. ORDSYS.ORDImage. (všechny operace s objektem jsou převáděny do databáze) Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 24 / 40

Vkládání obrázků v Javě I Uložení multimédií Práce s multimédii vč. vyhledávání package cz. v u t b r. f i t. pdb. demo1.mm; import oracle. jdbc. pool. OracleDataSource ; import java. s q l. ; import oracle. jdbc. ; import oracle. ord. im. ; import java. i o. IOException ; class Demo1MmInsert { public s t a t i c void main ( String args [ ] ) throws IOException, SQLException { / / create a OracleDataSource instance OracleDataSource ods = new OracleDataSource ( ) ; ods. seturl ( " jdbc : o racle : t h i n : @gort. f i t. v u t b r. cz :1521: dbgort " ) ; ods. setuser ( System. getproperty ( " l o g i n " ) ) ; ods. setpassword ( System. getproperty ( " password " ) ) ; / / connect to the database Connection conn = ods. getconnection ( ) ; conn. setautocommit ( false ) ; / / f o r a l l p i c t u r e s car1. jpg... car4. jpg for ( i n t i d = 1; i d <= 4; i d ++) { Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 25 / 40

Vkládání obrázků v Javě II Uložení multimédií Práce s multimédii vč. vyhledávání / / i n s e r t a new record with an empty ORDImage object Statement stmt1 = conn. createstatement ( ) ; S t r i n g insertsql = " i n s e r t i n t o products ( id, photo ) values " + " ( " + i d + ", ordsys. ordimage. i n i t ( ) ) " ; stmt1. executeupdate ( insertsql ) ; stmt1. close ( ) ; / / r e t r i e v e the p r e v i o u s l y created ORDImage o b j e c t f o r f u t u r e updating Statement stmt2 = conn. createstatement ( ) ; String selsql = " select photo from products where id = " + id + " f o r update " ; OracleResultSet r s e t = ( OracleResultSet ) stmt2. executequery ( selsql ) ; r s e t. next ( ) ; OrdImage imgproxy = ( OrdImage ) r s e t. getoradata ( " photo ", OrdImage. getoradatafactory ( ) ) ; r s e t. close ( ) ; stmt2. close ( ) ; / / load the media data from a f i l e to the ORDImage Java object imgproxy. loaddatafromfile ( ". / car " + i d + ". jpg " ) ; / / set the p r o p e r t i e s of the Oracle Mm o b j e c t from the Java o b j e c t imgproxy. s e t P r o p e r t i e s ( ) ; / / update the table with ORDImage Java object ( data already loaded ) String updatesql1 = " update products set " + " photo=? where id = " + id ; Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 26 / 40

Vkládání obrázků v Javě III Uložení multimédií Práce s multimédii vč. vyhledávání OraclePreparedStatement pstmt = ( OraclePreparedStatement ) conn. preparestatement ( updatesql1 ) ; pstmt. setoradata ( 1, imgproxy ) ; pstmt. executeupdate ( ) ; pstmt. close ( ) ; / / update the t a b l e with S t i l l I m a g e o b j e c t and f e a t u r e s Statement stmt3 = conn. createstatement ( ) ; String updatesql2 = " update products p set " + " p. photo_si= S I _ S t i l l I m a g e ( p. photo. getcontent ( ) ) where i d = " + i d ; stmt3. executeupdate ( updatesql2 ) ; String updatesql3 = " update products p set " + " p. photo_ac=si_averagecolor ( p. photo_si ), " + " p. photo_ch=si_colorhistogram ( p. photo_si ), " + " p. photo_pc= S I _ P o s i t i o n a l C o l o r ( p. photo_si ), " + " p. photo_tx=si_texture ( p. photo_si ) where id = " + id ; stmt3. executeupdate ( updatesql3 ) ; stmt3. close ( ) ; } conn. commit ( ) ; / / commit the t h r a n s a c t i o n } conn. close ( ) ; / / close the connection } Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 27 / 40

Uložení multimédií Práce s multimédii vč. vyhledávání Překlad s Oracle Multimedia a spuštění 1 Z webu cvičení stáhnout knihovny ordmi.jar a runtime12.jar. (https://www.fit.vutbr.cz/homes/rychly/private/pdb/lib/ oracle.ordim/ordim.jar a.../runtime12.jar) 2 Knihovny přidat do CLASSPATH pro překlad a spuštění. (javac -classpath...:./lib/ordim.jar:./lib/runtime12.jar... ) Předchozí příklad: $ javac classpath. :. / l i b / ojdbc7. j a r :. / l i b / ordim. j a r \ cz / v u t b r / f i t / pdb / demo1 /mm/ Demo1MmInsert. java $ java classpath. :. / l i b / ojdbc7. j a r :. / l i b / ordim. j a r :. / l i b / runtime12. j a r \ Dlogin=xnovak99 Dpassword= \ cz. v u t b r. f i t. pdb. demo1.mm. Demo1MmInsert Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 28 / 40

Uložení multimédií Práce s multimédii vč. vyhledávání Získávání multimédií z databáze a jejich vlastnosti I package cz. v u t b r. f i t. pdb. demo1.mm; import oracle. jdbc. pool. OracleDataSource ; import java. s q l. ; import oracle. jdbc. ; import oracle. ord. im. ; import java. i o. IOException ; class Demo1MmProp { public s t a t i c void main ( String args [ ] ) throws IOException, SQLException { / / create a OracleDataSource instance OracleDataSource ods = new OracleDataSource ( ) ; ods. seturl ( " jdbc : o racle : t h i n : @gort. f i t. v u t b r. cz :1521: dbgort " ) ; ods. setuser ( System. getproperty ( " l o g i n " ) ) ; ods. setpassword ( System. getproperty ( " password " ) ) ; / / connect to the database Connection conn = ods. getconnection ( ) ; / / create a JDBC statement to select ODRImage objects from db. Statement stmt = conn. createstatement ( ) ; / / execute the query and obtain the r e s u l t set OracleResultSet r s e t = ( OracleResultSet ) stmt. executequery ( " select id, photo from products " ) ; Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 29 / 40

Uložení multimédií Práce s multimédii vč. vyhledávání Získávání multimédií z databáze a jejich vlastnosti II / / r e t r i e v e the ORDImage o b j e c t s from the r e s u l t set while ( r s e t. next ( ) ) { i n t i d = r s e t. g e t I n t ( " i d " ) ; OrdImage imgproxy = ( OrdImage ) r s e t. getoradata ( " photo ", OrdImage. getoradatafactory ( ) ) ; / / r e t r i e v e the media a t t r i b u t e s i n t height = imgproxy. getheight ( ) ; i n t width = imgproxy. getwidth ( ) ; System. out. p r i n t l n ( " Photo " + i d + " : " + height + " x " + width ) ; / / w r i t e the media to disk imgproxy. g e t D a t a I n F i l e ( ". / car " + i d + " out. jpg " ) ; } / / close the r e s u l t set and the query r s e t. close ( ) ; stmt. close ( ) ; } conn. close ( ) ; / / close the connection } Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 30 / 40

Uložení multimédií Práce s multimédii vč. vyhledávání Překlad a spuštění příkladu pro získání z databáze Do databáze předchozím příkladem nahrány následující obrázky: 1 2 3 4 Překlad a spuštění příkladu: $ javac classpath. :. / l i b / ojdbc7. j a r :. / l i b / ordim. j a r \ cz / v u t b r / f i t / pdb / demo1 /mm/ Demo1MmProp. java $ java classpath. :. / l i b / ojdbc7. j a r :. / l i b / ordim. j a r :. / l i b / runtime12. j a r \ Dlogin=xnovak99 Dpassword= \ cz. v u t b r. f i t. pdb. demo1.mm. Demo1MmProp Photo 1: 371x600 Photo 2: 374x600 Photo 3: 378x600 Photo 4: 377x600 Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 31 / 40

Uložení multimédií Práce s multimédii vč. vyhledávání Operace s multimédii v databázi přes Java proxy I package cz. v u t b r. f i t. pdb. demo1.mm; import oracle. jdbc. pool. OracleDataSource ; import java. s q l. ; import oracle. jdbc. ; import oracle. ord. im. ; import java. i o. IOException ; class Demo1MmConvert { public s t a t i c void main ( String args [ ] ) throws IOException, SQLException { / / create a OracleDataSource instance OracleDataSource ods = new OracleDataSource ( ) ; ods. seturl ( " jdbc : o racle : t h i n : @gort. f i t. v u t b r. cz :1521: dbgort " ) ; ods. setuser ( System. getproperty ( " l o g i n " ) ) ; ods. setpassword ( System. getproperty ( " password " ) ) ; / / connect to the database Connection conn = ods. getconnection ( ) ; conn. setautocommit ( false ) ; / / i n s e r t a new record with an empty ORDImage object Statement stmt1 = conn. createstatement ( ) ; S t r i n g insertsql = " i n s e r t i n t o products ( id, photo ) values " + " ( 5, ordsys. ordimage. i n i t ( ) ) " ; Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 32 / 40

Uložení multimédií Práce s multimédii vč. vyhledávání Operace s multimédii v databázi přes Java proxy II stmt1. executeupdate ( insertsql ) ; stmt1. close ( ) ; / / r e t r i e v e the p r e v i o u s l y created ORDImage o b j e c t f o r updating Statement stmt2 = conn. createstatement ( ) ; String selsql1 = " select photo from products where id = 5 f o r update " ; OracleResultSet r s e t 1 = ( OracleResultSet ) stmt2. executequery ( selsql1 ) ; r s e t 1. next ( ) ; OrdImage dstimgproxy = ( OrdImage ) r s e t 1. getoradata ( " photo ", OrdImage. getoradatafactory ( ) ) ; r s e t 1. close ( ) ; stmt2. close ( ) ; / / r e t r i e v e ORDImage o b j e c t of a source image Statement stmt3 = conn. createstatement ( ) ; String selsql2 = " select photo from products where id = 1 " ; OracleResultSet r s e t 2 = ( OracleResultSet ) stmt3. executequery ( selsql2 ) ; r s e t 2. next ( ) ; OrdImage srcimgproxy = ( OrdImage ) r s e t 2. getoradata ( " photo ", OrdImage. getoradatafactory ( ) ) ; r s e t 2. close ( ) ; stmt3. close ( ) ; / / perform conversion ( processing occurs on the Oracle Database ) srcimgproxy. processcopy ( " maxscale=100 100 f i l e f o r m a t =png ", dstimgproxy ) ; Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 33 / 40

Uložení multimédií Práce s multimédii vč. vyhledávání Operace s multimédii v databázi přes Java proxy III / / save the t a r g e t image OraclePreparedStatement pstmt = ( OraclePreparedStatement ) conn. preparestatement ( " update products set photo=? where id = 5 " ) ; pstmt. setoradata ( 1, dstimgproxy ) ; pstmt. executeupdate ( ) ; pstmt. close ( ) ; / / update the t a r g e t image with S t i l l I m a g e o b j e c t and f e a t u r e s Statement stmt4 = conn. createstatement ( ) ; String updatesql1 = " update products p set " + " p. photo_si= S I _ S t i l l I m a g e ( p. photo. getcontent ( ) ) where i d = 5 " ; stmt4. executeupdate ( updatesql1 ) ; String updatesql2 = " update products p set " + " p. photo_ac=si_averagecolor ( p. photo_si ), " + " p. photo_ch=si_colorhistogram ( p. photo_si ), " + " p. photo_pc= S I _ P o s i t i o n a l C o l o r ( p. photo_si ), " + " p. photo_tx=si_texture ( p. photo_si ) where id = 5 " ; stmt4. executeupdate ( updatesql2 ) ; stmt4. close ( ) ; } } dstimgproxy. g e t D a t a I n F i l e ( ". / car5 out. png " ) ; conn. commit ( ) ; conn. close ( ) ; / / commit and close the connection Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 34 / 40

Uložení multimédií Práce s multimédii vč. vyhledávání Překlad a spuštění příkladu pro operace Databáze transformuje a překonvertuje první obrázek: 1 ) 5 Překlad a spuštění příkladu: $ javac classpath. :. / l i b / ojdbc7. j a r :. / l i b / ordim. j a r \ cz / v u t b r / f i t / pdb / demo1 /mm/ Demo1MmConvert. java $ java classpath. :. / l i b / ojdbc7. j a r :. / l i b / ordim. j a r :. / l i b / runtime12. j a r \ Dlogin=xnovak99 Dpassword= \ cz. v u t b r. f i t. pdb. demo1.mm. Demo1MmConvert Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 35 / 40

Uložení multimédií Práce s multimédii vč. vyhledávání JDBC a ostatní multimédia z Oracle Database S dalšími typy multimédií pracujeme podobně, jako s OrdImage: OrdImage imgproxy = ( OrdImage ) r s e t. getoradata ( " product_photo ", OrdImage. getoradatafactory ( ) ) ; OrdAudio audproxy = ( OrdAudio ) r s e t. getoradata ( " product_audio ", OrdAudio. getoradatafactory ( ) ) ; OrdVideo vidproxy = ( OrdVideo ) r s e t. getoradata ( " product_video ", OrdVideo. getoradatafactory ( ) ) ; OrdDoc docproxy = ( OrdDoc ) r s e t. getoradata ( " product_ testimonials ", OrdDoc. getoradatafactory ( ) ) ; Jednotlivé typy mají specifické vlastnosti: String audformat = audproxy. getformat ( ) ; S t r i n g vidmimetype = vidproxy. getmimetype ( ) ; Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 36 / 40

Podobnostní vyhledávání Uložení multimédií Práce s multimédii vč. vyhledávání Podobnost obrázků lze zjistit voláním SI_ScoreByFtrList. (starší způsob přes OrdImageSignature v Oracle 11g nefunguje) Podobnost lze zjišt ovat pouze pro obrázky v SI_StillImage. (pokud není k dispozici, tak vytvořit konstruktorem SI_StillImage z OrdImage, resp. z BLOBu získaného pomocí...source.localdata) Podobnost mezi obrázkem a charakteristikami dalšího obrázku. (charakteristiky možno generovat v dotazu, ale rychlejší z před-připravených) Příklad: SELECT src. i d as source, dst. i d as d e s t i n a t i o n, SI_ScoreByFtrList ( new S I _ F e a t u r e L i s t ( src. photo_ac, 0. 3, src. photo_ch, 0. 3, src. photo_pc, 0. 1, src. photo_tx, 0. 3 ), dst. photo_si ) as s i m i l a r i t y FROM products src, products dst WHERE src. i d <> dst. i d AND src. i d = 1 ORDER BY s i m i l a r i t y ASC; Výsledek: 1 ) 3(8.02), 4(12.25), 2(13.83). Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 37 / 40

Literatura Oracle Multimedia Uložení multimédií Práce s multimédii vč. vyhledávání Oracle Multimedia Application Development. http://docs.oracle.com/database/121/imurg/ch_appdev.htm#imurg2000 Oracle intermedia User s Guide Application Development. http://download.oracle.com/docs/cd/b19306_01/appdev.102/b14302/ch_ websrvtier.htm Oracle Multimedia Sample Applications. http://docs.oracle.com/database/121/imurg/ap_demos.htm#imurg10000 David Krch: Oracle a multimédia?. Databázový svět. http://www.dbsvet.cz/view.php?cisloclanku=2005072902 Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 38 / 40

FAQ I FAQ Poděkování a otázky 1 Je nutno před každým dotazem otevírat spojení a po něm ho zavírat? (Rozhodně to není nutné a ani doporučované. Je dobré mít v aplikaci stále otevřené spojení, např. ho otevřít po přihlášení uživatele, a to používat. U serverových aplikací se dokonce vytváří množina otevřených spojení, tvz. pool, a ty se postupně recyklují.) 2 Proč se musí vždy nejprve získat z databáze (i prázdný) obrázek a pak, po načtení souboru v Javě nebo provedení operací do databáze zpět ukládat? Vždyt je první krok zbytečný. (Uvědomte si, že v Javě pracujeme pouze s proxy na obrázek, který je ve skutečnosti v databázi. Proto je nutno ho v té databázi nejprve inicializovat vytvořit databázový objekt, který však bude uložen do tabulky až při závěrečném update.) 3 Jak určíme prahovou hodnotu pro funkci SI_ScoreByFtrList? A jak správně nastavit váhy? (Obojí se nejlépe určí experimentálně, nad vhodnými testovacími daty.) Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 39 / 40

FAQ Poděkování a otázky Děkuji za pozornost. Otázky? Diskuze? Marek Rychlý Úvod do Javy, JDBC a multimediální databáze 1. demonstrační cvičení pro PDB, 2. říjen 2015 40 / 40