C Přístup k databázím z WWW

Podobné dokumenty
C Přístup k databázím z WWW

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

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

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

Datová vrstva informačního systému. Miroslav Beneš

Použití databází na Webu

Datová vrstva informačního systému. Java Database Connectivity JDBC. Obsah přednášky JDBC. Datová vrstva informačního systému

Databázové a informační systémy

rychlý vývoj webových aplikací nezávislých na platformě Jiří Kosek

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

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

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);

Databáze II. 1. přednáška. Helena Palovská

Tvorba informačních systémů

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

5. POČÍTAČOVÉ CVIČENÍ

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Tvorba WWW stránek. přehled technologií používaných na webu principy jednotlivých technologií a možnosti jejich vzájemného kombinování

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

Stručný obsah. část III Aktualizace dat Kapitola 10: Aktualizace databáze 257 Kapitola 11: Integrita dat 275 Kapitola 12: Zpracování transakcí 307

Maturitní otázky z předmětu PROGRAMOVÁNÍ

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

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Tvorba informačních systémů

Instalace a konfigurace web serveru. WA1 Martin Klíma

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

Oracle XML DB. Tomáš Nykodým

Databázové systémy. Cvičení 6: SQL

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

10. Architektura klient/server a třívrstvá architektura

10. Architektura klient/server a třívrstvá architektura

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

Informační systémy 2008/2009. Radim Farana. Obsah. Aktivní serverové stránky ASP. Active Server Pages. Activex Data Objects. LDAP database.

Databázové systémy trocha teorie

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

TÉMATICKÝ OKRUH Softwarové inženýrství

Databázové systémy Cvičení 5.2

Maturitní témata z předmětu PROGRAMOVÉ VYBAVENÍ pro šk. rok 2012/2013

Současný svět Projekt č. CZ.2.17/3.1.00/32038, podpořený Evropským sociálním fondem v rámci Operačního programu Praha adaptabilita

language="javascript">... </script>.

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

Michal Krátký, Miroslav Beneš

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

FIREBIRD relační databázový systém. Tomáš Svoboda

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

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

Tvorba informačních systémů

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

Formuláře. Internetové publikování. Formuláře - příklad

Databázové aplikace pro internetové prostředí PHP úvod, základní princip, vkládání skriptu, komentáře, výpis na obrazovku

Programování v jazyku C# II. 5.kapitola

Text úlohy. Systémový katalog (DICTIONARY):

1. Webový server, instalace PHP a MySQL 13

Semináˇr Java X J2EE Semináˇr Java X p.1/23

Skriptovací jazyky. Obsah

Úvod do databázových systémů

1 Webový server, instalace PHP a MySQL 13

MySQLi (objektově) Příklad vytvoření instance třídy včetně parametrů pro připojení: $mysqli = new mysqli('localhost', 'login', 'heslo', 'databaze');

1 Úvod. J. Zendulka: Databázové systémy - 1 Úvod 1

Tvorba informačních systémů

Databázové a informační systémy Jana Šarmanová

Server-side technologie pro webové aplikace

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Jazyk SQL databáze SQLite. připravil ing. petr polách

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Základy informatiky. 06 Databázové systémy. Kačmařík/Szturcová/Děrgel/Rapant

J. Zendulka: Databázové systémy - 1 Úvod Intuitivní vymezení pojmu databáze

Tvorba informačních systémů

SYBASE ADAPTIVE SERVER JAVA V DATABÁZI

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Střední odborná škola a Střední odborné učiliště, Hořovice

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

Tvorba informačních systémů

PHP a Large Objecty v PostgreSQL

8.2 Používání a tvorba databází

PRŮBĚHOVÝ TEST Z PŘEDNÁŠEK

Databázové systémy úvod

Ukládání a vyhledávání XML dat

Změny v Tabulce ALTER TABLE nazev_tabulky prikaz1, prikaz2, prikaz3,..., prikazn; -provede změny ve stávající tabulce s názvem "nazev_tabulky"

DUM 12 téma: Příkazy pro tvorbu databáze

INOVACE PŘEDMĚTŮ ICT. MODUL 11: PROGRAMOVÁNÍ WEBOVÝCH APLIKLACÍ Metodika

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Nové jazykové brány do Caché. Daniel Kutáč

Zabezpečení proti SQL injection

Základy PHP. Úvod do jazyka PHP a principů skriptování na straně serveru

Zabezpečení proti SQL injection

Klíčová slova: dynamické internetové stránky, HTML, CSS, PHP, SQL, MySQL,

SQL - trigger, Databázové modelování

VÝVOJ INTERNETOVÝCH APLIKACÍ - VIA

Michal Krátký, Miroslav Beneš

Univerzita Pardubice. Centrální správa dokumentů

Stěhování aplikací. Michal Tomek, Sales Manager

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

KIV/ZIS cvičení 6. Tomáš Potužák

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Architektura softwarových systémů

Transkript:

C Přístup k databázím z WWW C.1. Úvod... 2 C.2. PHP (Personal Home Page)... 4 C.3. Internet Information Server... 9 C.3.1. Active Server Pages (ASP)... 9 C.4. Přístup k databázím z jazyka Java... 17 C.4.1. Rozhraní JDBC... 18 C.4.2. SQLJ... 25 J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 1

C.1. Úvod - pojem transakční aplikace na WWW (L.Wienszczak (Sybase) - CW 24/97) uživatel čte uživatel sám zapisuje statické WWW obyčejné WWW stránky jednoduché dotazníky dynamické WWW zpravodajské servery transakční aplikace potřeba skloubit přednosti technologie WWW s databázovou technologií - architektura klient/server - otázka komunikace WWW a DB serveru. - Používané přístupy: a) Použití CGI prostředků WWW klient WWW server CGI program Požadavek na CGI aplikaci HTML dokument Požadavek na CGI aplikaci Vygenerovaná HTML data Požadavek na DB služby DB data DB DB server - režie spouštění nových procesů, interpretace skriptů - opakované otevírání spojení s DB serverem J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 2

- př. skriptovací jazyky PHP, Perl, programy v C b) Použití aplikací ve tvaru DLL - snížení režie spouštění procesů oproti klasickým CGI aplikacím, př. ISAPI c) Vyhodnocení dokumentu na WWW serveru formou přidaných direktiv WWW klient WWW server DB server Požadavek na WWW stránku Vygenerovaný HTML dokument - př. Internet Information Server + IDC, ASP d) Přístup k databázím z jazyka Java Požadavek na DB služby DB data DB J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 3

C.2. PHP (Personal Home Page) - skriptovací jazyk pro skripty na straně WWW serveru - podporuje přístup k řadě SŘBD (Adabas D, dbase, Empress, FilePro, Informix, InterBase, msql, MySQL, Oracle, PostgreSQL, Solid, Sybase, Velocis, Unix dbm) Přístup k MySQL (http://www.mysql.com/) Připojení k databázovému serveru a nastavení aktuální aktivní databáze: mysql_connect - otevře spojení s databázovým serverem MySQL, vrací identifikátor spojení mysql_pconnect - otevře trvalé spojení s MySQL serverem (neukončuje se při ukončení skriptu ani funkcí mysql_close(), vrací identifikátor spojení. mysql_select_db - nastaví aktuální aktivní databázi pro dané spojení s databázovým serverem mysql_close - uzavře spojení s databázovým serverem MySQL Vytvoření a zrušení databáze: mysql_create_db - vytvoří databázi spravovanou serverem MySQL mysql_drop_db - zruší databázi spravovanou serverem MySQL Provádění příkazů SQL a práce s kurzorem (v terminologii PHP3 výsledek (result)): mysql_query - pošle zadaný příkaz současné aktivní databázi serveru MySQL, pro INSERT, UPDATE a DELETE vrací příznak úspěšnosti, pro SELECT číslo kurzoru mysql_db_query - vrátí číslo kurzoru pro zadaný dotaz pro danou databázi mysql_affected_rows - vrátí počet řádků ovlivněných posledním příkazem INSERT, UPDATE nebo DELETE mysql_fetch_array - vrátí řádek kurzoru jako asociativní pole (výběr podle jména sloupce) J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 4

Př) <?php mysql_connect($host,$user,$password); $result = mysql_db_query("uivt","select * from osoby"); while($row = mysql_fetch_array($result)) { echo $row["os_cislo"]; echo $row["jmeno"]; } mysql_free_result($result);?> mysql_fetch_row - vrátí řádek kurzoru jako pole s prvky zpřístupňovanými pořadovým číslem Př) <?php mysql_connect($host,$user,$password); $result = mysql_db_query("uivt","select * from osoby"); while($row = mysql_fetch_row($result)) { echo $row[0]; // předp., že os_cislo je prvním vybraným sloupcem echo $row[1]; // předp., že jmeno je druhým vybraným sloupcem } mysql_free_result($result);?> mysql_fetch_object - vrátí řádek kurzoru jako objekt - přístup přes jména (obdoba fetch_array) J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 5

Př) <?php mysql_connect($host,$user,$password); $result = mysql_db_query("uivt","select * from osoby"); while($row = mysql_fetch_object($result)) { } echo $row-> os_cislo; echo $row->jmeno; mysql_free_result($result);?> mysql_result - vrátí hodnotu daného sloupce daného řádku daného kurzoru, neměla by být používána s jinými funkcemi zpřístupňujícími řádky kurzoru mysql_data_seek - posune ukazatel kurzoru na řádek s daným pořadovým číslem mysql_free_result - uvolní paměťový prostor kurzoru mysql_num_rows- vrátí počet řádků kurzoru mysql_num_fields - vrací počet sloupců kurzoru mysql_fetch_lengths - vrátí délky polí posledně vybraného řádku kurzoru funkcí mysql_fetch_row mysql_insert_id - vrátí identifikátor generovaný posledním příkazem INSERT pro sloupec typu AUTO_INCREMENTED J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 6

Ošetření chyb: mysql_errno - vrátí číslo chyby poslední operace MySQL mysql_error- vrátí text chybového hlášení poslední operace MySQL Přístup k metadatům: mysql_list_dbs - vrátí kurzor obsahující seznam dostupných databází, k procházení slouží funkce mysql_tablename mysql_list_tables- vrátí kurzor obsahující seznam tabulek dané databáze, k procházení slouží funkce mysql_tablename mysql_tablename - vrátí jméno tabulky s daným pořadovým číslem prostřednictvím kurzoru vráceného funkcí mysql_list_tables mysql_fetch_field - vrátí objekt, který nese informaci o daném sloupci daného kurzoru mysql_field_seek - nastaví ukazatel kurzoru na daný sloupec mysql_field_name - vrátí jméno daného sloupce kurzoru mysql_field_table - vrátí jméno tabulky, které patří zadaný sloupec kurzoru mysql_field_type - vrátí jméno tabulky, které patří zadaný sloupec výsledku mysql_field_flags - vrátí příznaky ("not_null", "primary_key", ), spojené se zadaným sloupcem výsledku mysql_field_len - vrátí délku specifikovaného sloupce daného kurzoru mysql_list_fields - zpřístupní metadata pro danou tabulku, vrací číslo kurzoru, které lze použít ve funkcích pro práci s metadaty (mysql_field_flags(), mysql_field_len(), mysql_field_name() a mysql_field_type()) J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 7

Př) <?php mysql_connect($host,$user,$password); mysql_select_db("uivt"); $result = mysql_query("select * FROM osoby"); $fields = mysql_num_fields($result); $rows = mysql_num_rows($result); $i = 0; $table = mysql_field_table($result, $i); echo "Tabulka '".$table."' má ".$fields." Sloupců a ".$rows." řádků <BR>"; echo "Tabulka má následující sloupce: <BR>"; while ($i < $fields) { $type = mysql_field_type ($result, $i); $name = mysql_field_name ($result, $i); $len = mysql_field_len ($result, $i); $flags = mysql_field_flags ($result, $i); echo $name." ".$type." ".$len." ".$flags."<br>"; $i++; } mysql_close();?> J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 8

C.3. Internet Information Server - podpora pro přístup k databázi: CGI aplikace, Internet Database Connector, Active Server Pages C.3.1. Active Server Pages (ASP) - skripty vykonávány na straně serveru, provedení před odesláním stránky klientovi - textové informace, HTML značky, příkazy skriptu(vbscript, JavaScript), oddělovače příkazů skriptu dvojice <% %>, resp. značka <SCRIPT RUNAT=SERVER... > </SCRIPT> - klientské a serverovské skripty lze kombinovat (modifikace klientského skriptu) - zabudované objekty : Request - získání informací od uživatele. Response - zaslání informací uživateli. Server - práce s ActiveX komponentami (pro DB Database Access - ADO). Session - uchování informací o uživatelově sezení. Application - uchování informací o uživatelích dané aplikace. Př) ADODB pro Microsoft OLE DB přes ODBC Př) - třídy pro přístup k datům v databázi: Connection - reprezentace spojení se zdrojem dat. Recordset - reprezentace tabulky vrácené po vykonání příkazu (obdoba kurzoru). <%Conn = Server.CreateObject("ADODB.Connection") Conn.Open("ADOZamestnanci") J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 9

sql="select Jmeno, Plat FROM Zamestnanci WHERE plat > 10000" RS = Conn.Execute(sql) counter = 0 while (!RS.EOF) { hodnota[counter].jmeno = RS("Jmeno") hodnota[counter].plat = RS(1) RS2.MoveNext() counter = counter + 1 } %> Command - definice příkazu pro zdroj dat. Field - reprezentuje sloupec dat objektu třídy Recordset. Parameter - reprezentuje parametr objektu třídy Command. Error - informace o chybě vzniklé při vykonání příkazu. Př) <%@ LANGUAGE = "JavaScript" %> <HTML> <HEAD> <TITLE> Správa hotelů </TITLE> <% Conn = Server.CreateObject("ADODB.Connection") Conn.Open("dsn=Dracon;uid=web") WWW server SQL1 = "SELECT HCislo, RTRIM(Hotel) as Hotel, RTRIM(Stranka) as Stranka, CenaDo, CenaPo, " J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 10

SQL1 += "CenaXx FROM Hotely WHERE HCislo <> 0 ORDER BY HCislo" SQL2 = "SELECT Aktualni_Cislo, Krok FROM Ciselnik_Hotelu" RS1 = Conn.Execute(SQL1) RS2 = Conn.Execute(SQL2) %> <SCRIPT LANGUAGE="JavaScript"> WWW klient function THotel(HCislo, Hotel, Stranka, CenaDo, CenaPo, CenaXX){... }../* Tato funkce se volá při načtení stránky */ function Load(){ var f /* Načte informace z DB do pole objektů Hotel */ <%counter = 0 while(!rs1.eof){%> }%> modifikace klientského skriptu Hotely[<%=counter%>] = new Thotel (<%=RS1("HCislo")%>, '<%=RS1("Hotel")%>', '<%=RS1("Stranka")%>', <%=RS1("CenaDo")%>, <%=RS1("CenaPo")%>, <%=RS1("CenaXX")%>) document.formik.hotely.options[<%=counter%>] = new Option (Hotely[<%=counter%>].Hotel,<%=counter%>,false,false) <% counter = counter + 1 RS1.MoveNext() PocetHotelu = <%=counter%> J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 11

... } /* function Load */ /* Tato funkce volá skript pro vykonání SQL příkazů */ function Odeslat(){... } /* Funkce vkládá nové hotely. */ function NovyHotel(f){... } function UlozZmeny(){... } function ZmenaHotelu(f){... } function ZrusHotel(){... } /* ********************************************************* */ </SCRIPT> </HEAD> <BODY onload="load()"> <CENTER><H1>Správa hotelů</h1></center> <FORM NAME="formik"> <TABLE WIDTH="100%" > <TR> <TH WIDTH="30%"><CENTER>Hotely</CENTER></TH> <TH><CENTER>Údaje</CENTER></TH> </TR> J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 12

<TR><TD><SELECT NAME = "hotely" SIZE = "8" onfocus="" onchange="zmenahotelu(this.form)" WIDTH = 150> </TD> <OPTION VALUE=0> xxxxxxxxxxxxxx <OPTION VALUE=0> xxxxxxxxxxxxxx <OPTION VALUE=0> xxxxxxxxxxxxxx <OPTION VALUE=0> xxxxxxxxxxxxxx </SELECT> <TD><TABLE WIDTH="100%" > <TR> <TD WIDTH="40%">Název hotelu </TD> </TR> <TD><INPUT TYPE="TEXT" NAME="name" SIZE="15" MAXLENGTH="14" onchange="okmodifikace=true"></td> <TR> <TD >Adresa stránky</td> </TR> <TD><INPUT TYPE="TEXT" NAME="addr" SIZE="30" MAXLENGTH="31" onchange="okmodifikace=true"></td> <TR><TD>Cena do termínu</td> <TD><INPUT TYPE="TEXT" NAME="cenado" SIZE="5" MAXLENGTH="4" onchange="okmodifikace=true"></td> </TR> <TR><TD>Cena po termínu</td> <TD><INPUT TYPE="TEXT" NAME="cenapo" SIZE="5" MAXLENGTH="4" onchange="okmodifikace=true"></td> J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 13

</TD> </TR> </TABLE> <BR> <HR> <BR> <CENTER> </TR> <TR><TD>Cena na místě</td> </TR> </TABLE> <TABLE WIDTH="50%" <TD><INPUT TYPE="TEXT" NAME="cenaxx" SIZE="5" MAXLENGTH="4" onchange="okmodifikace=true"></td> <TR><TD><INPUT TYPE="BUTTON" VALUE="Nový hotel" onclick="novyhotel(this.form)"></td> </TR> <TD><INPUT TYPE="BUTTON" VALUE="Zruš hotel" onclick="zrushotel()"></td> <TD><INPUT TYPE="BUTTON" VALUE="Ulož změny" onclick="ulozzmeny()"></td> <TD><INPUT TYPE="BUTTON" VALUE="Obnov změny" onclick="zmenahotelu(this.form)"></td> <TR><TD COLSPAN="4" WIDTH="100%" ALIGN="CENTER"><INPUT TYPE="BUTTON" VALUE="Odešli všechny změny" onclick="posli()"></td> J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 14

</TR> </TABLE> </CENTER> </FORM> <FORM NAME="stat"> <INPUT TYPE="HIDDEN" NAME="Flag1"> <INPUT TYPE="HIDDEN" NAME="Flag2"> <INPUT TYPE="HIDDEN" NAME="Turn"> <INPUT TYPE="HIDDEN" NAME="OK"> </FORM> </BODY> J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 15

</HTML> J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 16

C.4. Přístup k databázím z jazyka Java Možnosti přístupu k databázi z prostředí jazyka Java: JDBC vložený SQL (SQLJ) J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 17

C.4.1. Rozhraní JDBC - Java API pro styk s relačními databázemi, rozhraní nízké úrovně - typické kroky při přístupu k databázi: Vytvoření spojení: Connection con = DriverManager.getConnection ("jdbc:odbc:db", "login", "password"); Vytvoření příkazu: Statement stmt = con.createstatement(); Vykonání příkazů a vytvoření objektu pro zpracování výsledků : ResultSet rs = stmt.executequery("select a, b, c FROM table1"); Zpracování výsledků: } WHILE(rs.next()){ int x = rs.getint("a"); String s = rs.getstring(2); Float f = rs.getfloat("c"); - kolekce Java tříd a rozhraní: java.sql.drivermanager - práce s ovladači, ustavení spojení s databází - metoda getconnection (URL, user, password) URL: jdbc:<subprotokol>:<jméno> java.sql.connection - reprezentace spojení s databází J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 18

Př) Connection connection; String url = "jdbc:odbc:web SQL"; /* Pokus o pripojeni a nastaveni AUTOCOMMIT */ try { /* zavedeni driveru */ } Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); catch (java.lang.classnotfoundexception ex) {... } try { /* ustaveni spojeni */ } connection = DriverManager.getConnection(url, "sa", "brno"); catch (java.sql.sqlexception ex){... } try { /* nastaveni rizeneho COMMIT */ } connection.setautocommit(false); catch (java.sql.sqlexception ex){... } java.sql.statement, PreparedStatement, CallableStatement - reprezentuje kontejner pro vykonání (SQL) příkazů J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 19

- tři třídy pro posílání příkazů: Statement executequery, executeupdate, execute - neparametrizované SQL příkazy PreparedStatement - parametrizované SQL příkazy + opakovaně prováděné neparametrizované příkazy CallableStatement - volání SQL uložených procedur java.sql.resultset - reprezentuje výsledek dotazu (obdoba kurzoru z SQL). Př) - metody next() a getxxx(), zízkání metadat, testování NULL,... Connection con =... PreparedStatement pstmt = con.preparestatement( "UPDATE table2 SET m=? WHERE x=?"); pstmt.setlong(1, 123456); pstmt.setlong(2, 0); pstmt.executeupdate(); CallableStatement cstmt = con.preparecall( "{call getnewdata(?,?)}" ); cstmt.registeroutparameter(1,java.sql.types.tinyint); cstmt.registeroutparameter(2,java.sql.types.decimal,2); J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 20

cstmt.executeupdate(); byte x = cstmt.getbyte(1); Bignum y = cstmt.getbignum(2,2); Komunikace rozhraní a tříd ResultSet executequery getxxx executequery getmoreresults setxxx executeupdate, execute Statement PreparedStatement preparestatement preparecall createstatement commit, abort Connection getconnection Data types:... getxxx CallableStatement DriverManager J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 21

- podpora dvou- i tříúrovňového modelu přístupu k databázi. Java applet nebo HTML prohlížeč Počítač klienta SŘBD a jeho protokol Java applet nebo HTML Počítač klienta prohlížeč HTTP, RMI nebo CORBA volání Aplikační server (Java) JDBC Server SŘBD DB server SŘBD a jeho protokol SŘBD DB server Dvouúrovňový model Tříúrovňový model J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 22

- kategorie JDBC ovladačů: 1. JDBC-ODBC most + ODBC ovladač - problémy: - vyšší režie - náročnější údržba - nesplňuje požadavek Just-in-time delivery" J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 23

2. Native - API partly-java ovladač 3. JDBC-Net all-java ovladač (kombinace Javy a C (C++)) 3. Native-protokol all-java ovladač (např. Sybase jconnect) Střední vrstva WWW klient JDBC Load URL Počítač s WWW serverem WWW server Wire Level Protocol DB server J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 24

C.4.2. SQLJ Charakteristika SQLJ Standardní způsob vkládání SQL: ANSI dokument X3.135.10-1998, ISO - ISO/IEC 9075, část 10 (OLB). Motivace: kompaktní aplikační rozhraní vysoké úrovně, syntaktickou a sémantickou kontrolu příkazů SQL před prováděním programu, nezávislost syntaxe a sémantiky příkazů SQL na místě provádění (klient, databázový server, střední vrstva), možnost kombinace rozhraní SQLJ a JDBC sdílením identifikátorů spojení (connection handle), binární přenositelnost SQL: SQL92 Zvláštnosti prostředí jazyka Java oproti hostitelským jazykům pro SQL: objektová orientace, automatická správa paměti, existence odlišitelné prázdné hodnoty (null) pro složené datové typy, binární přenositelnost, podpora pro spolupráci komponent různých výrobců Program v SQLJ Překladač SQLJ Program vjavě Překladač Javy Javovský byte kód Přizpůsobení (customizer) Proveditelný program J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 25

Rysy SQLJ Př) Ucitel Os_cislo Jmeno Prijmeni Ustav Zarazeni Ustav Zkratka Nazev Adresa # sql {příkaz_sql} deklarace_objektu_sqlj; proveditelný deklarační - SELECT nebo výraz, - INSERT, UPDATE, DELETE, - FETCH, SELECT...INTO, - COMMIT, ROLLBACK, - CREATE, DROP, ALTER, - CALL, VALUES - SET. hostitelské proměnné a výrazy - spojení, - iterátor. #sql {SELECT ADRESA INTO :adresaustavu FROM USTAV WHERE ZKRATKA = :zkratkaustavu}; #sql {SELECT PRIJMENI INTO :prijmeni FROM WHERE OS_CISLO = :(docenti[i++])}; UCITEL vyhodnocení před JVM (zleva) možnost vedlejšího efektu J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 26

iterátor - Java objekt s funkcí kurzoru - mechanismy pro mapování sloupců dotazu na sloupce iterátoru: poziční (poziční iterátor), #sql iterator ZamestnanciUstavu(int, String); podle jména (pojmenovaný iterátor). #sql iterator ZamestnanciUstavu(int oscislo, String prijmeni); #sql iterator ZamestnanciUstavu(int, String); ZamestnanciUstavu iterp; // inicializace objektu iterp // deklarace objektu iterp #sql iterp = {SELECT OS_CISLO, PRIJMENI FROM UCITEL WHERE ZKRATKA = :zkratkaustavu}; int c; String p; #sql {FETCH :iterp INTO :c, :p}; while (!iterp.endfetch()){ System.out.println(p + (os.číslo: c + ) ); #sql {FETCH :iterp INTO :c, :p}; } J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 27

#sql iterator ZamestnanciUstavu(int oscislo, String prijmeni); ZamestnanciUstavu itern; // deklarace objektu itern // inicializace objektu itern #sql itern = {SELECT OS_CISLO AS OSCISLO, PRIJMENI FROM UCITEL WHERE ZKRATKA = :zkratkaustavu}; int c; String p; while (itern.next()){ c = itern.oscislo(); p = itern.prijmeni(); System.out.println(p + (os.číslo: c + ) ); } uložené procedury a funkce CREATE PROCEDURE ZMEN_NAZEV(IN ZKR_USTAVU CHAR(3), NOVY_NAZEV VARCHAR(150)); CREATE FUNCTION POCTY(ZKR_USTAVU IN CHAR(3), PROF OUT NUMBER(2), DOC OUT NUMBER(2)) RETURNING NUMBER(2); #sql {CALL ZMEN_NAZEV(:zkratkaUstavu, :novynazev)}; #sql celkem = {VALUES(POCTY(:IN zkratkaustavu, :OUT prof, :OUT doc))}; objekt kontextu spojení #sql context DBkontext; DBkontext kontext; // deklarace objektu kontextu spojeni kontext = new DBkontext(url, true); // inic. objektu,včetně otevření spojení exemplární schéma (exemplar schema) - skutečné/ typické schéma pro účely kontroly J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 28

- přiřazení třídám kontextu při spuštění překladače SQLJ další rysy - několik otevřených spojení, kombinace s JDBC,... #sql [kontext] { }; Porovnání SQLJ s JDBC JDBC - obecnější SQLJ - vyšší úroveň statické vazby se schématem DB Důsledky: Př) SQLJ program je kratší, možnost spojení s databází v době překladu pro typovou kontrolu, jednodušší práce s hostitelskými proměnnými, možnost použití výrazů, typování výsledků dotazů a návratových hodnot, JDBC předává hodnoty do/z SQL bez typové kontroly v době překladu, volání uložených procedur a funkcí je v SQLJ také jednodušší než v JDBC. Connection con =... PreparedStatement pstmt = con.preparestatement("update table2 SET m=? WHERE x=?"); pstmt.setlong(1, 123456); pstmt.setnull(2); pstmt.executeupdate(); CallableStatement cstmt = con.preparecall("{call getnewdata(?,?)}" ); cstmt.registeroutparameter(1,java.sql.types.tinyint); J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 29

cstmt.registeroutparameter(2,java.sql.types.decimal,2); cstmt.executeupdate(); byte x = cstmt.getbyte(1); Bignum y = cstmt.getbignum(2,2); Podpora jazyka Java ze strany Oracle strategická podpora Javy ze strany Oracle - JDeveloper + Qracle Application Server + Oracle8i (vč. JServeru- podpora JVM, Corba, JDBC, Enterprise Java Beans, SQLJ), referenční implementace překladače SQLJ Oracle, IBM, Sybase, Informix, Compaq/Tandem, JavaSoft, SQLJ aplikace SQLJ runtime JDBC/ODBC most JavaSoft JDBC/OCI ovladač Oracle tenký JDBC ovladač Oracle ODBC C knihovna OCI C knihovna Java sokety J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 30

varianty rozložení Java aplikace SQL runtime JDBC/OCI SQL*Net Oracle WWW prohlížeč HTTP http Listener http Dispatcher firewall Java aplikace SQL runtime JDBC/OCI OAS SQL*Net Oracle J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 31

Java aplikace SQL runtime tenký JDBC ovladač WWW prohlížeč HTTP SQL*Net (TCP/IP) firewall WWW server Oracle J. Zendulka: Databázové systémy Dodatek C Přístup k databázím z WWW 32