Datová vrstva informačního systému
Datová vrstva informačního systému
Obsah přednášky z
JDBC z z
Miroslav Beneš
z
z
ODBC z z z
z
architektura ovladače použití architektura ovladače a zdroje dat použití
PHP & MySQL Datová vrstva informačního systému
Java Database Connectivity JDBC
JDBC z z
z
z
rozhraní pro unifikovaný přístup k datům použití i mimo databáze – data ve formě tabulek (CSV, XLS, ...) ovladače jsou k dispozici pro většinu databázových systémů inspirováno rozhraním ODBC z z
objektové rozhraní možnost spolupráce s ODBC Datová vrstva informačního systému
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
2
4
1
Datová vrstva informačního systému
Architektura JDBC
Architektura JDBC
Aplikační kód
ResultSet
ResultSet
ResultSet
Statement
PreparedStatement
CallableStatement
JDBC API
java.sql.* javax.sql.*
Aplikace
Ovladač JDBC
Connection DriverManager
DB API
Oracle driver
Databáze Datová vrstva informačního systému
z z
5
z
z
Datová vrstva informačního systému
z
z
z
Typ 2:
z
Typ 3: z z
z
sun.jdbc.odbc.JdbcOdbcDriver com.mysql.jdbc.Driver
z
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
komunikace s nativním ovladačem komunikuje s centrálním serverem (Network Server) síťovým protokolem pro rozsáhlé heterogenní systémy
Typ 4: z
7
využívá ODBC (přes JDBC-ODBC bridge) obtížně konfigurovatelné
z
z
předá se databázi ovladač vyhodnotí přímo
Datová vrstva informačního systému
Typ 1: z
reprezentován specifickou třídou z
6
Typy JDBC ovladačů
zprostředkování komunikace aplikace s konkrétním typem databáze implementován obvykle výrobcem databáze dotazovací jazyk – SQL z
Sybase driver
ODBC driver
JDBC ovladač z
JDBC-ODBC bridge
založen čistě na jazyce Java přímý přístup do databáze Datová vrstva informačního systému
8
2
Datová vrstva informačního systému
Registrace ovladače z
Identifikace spojení
konkrétní ovladač je pevně spojen s aplikací
jdbc:driver:database jdbc:odbc:datasource;Attr=Value;…
new com.mysql.jdbc.Driver() z
výběr ovladače za běhu aplikace
Příklad: jdbc:mysql://localhost/dais3?user=dais3 &password=dais3 &useUnicode=true &characterEncoding=iso-8859-2
String driverName = “com.mysql.jdbc.Driver”; try { Class.forName(driverName); } catch( ClassNotFoundException e) { // obsluha výjimky }
Datová vrstva informačního systému
9
Připojení k databázi
Datová vrstva informačního systému
Objekt Statement z
Connection con = DriverManager.getConnection( “url”, “uživatel”, “heslo” ) 1.
2.
Reprezentuje SQL příkaz: z z z
Statement PreparedStatement CallableStatement
z
Vytvoření instance příkazu:
z
Provedení příkazu
Statement stmt = con.createStatement();
DriverManager se dotáže všech registrovaných ovladačů Rozpozná-li ovladač své url, vrátí objekt Connection Datová vrstva informačního systému
10
ResultSet rs = stmt.executeQuery( “SELECT * FROM t”); int num = stmt.executeUpdate( “DELETE * FROM t”); 11
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
Datová vrstva informačního systému
12
3
Datová vrstva informačního systému
Objekt ResultSet z
Ošetření chyb
Reprezentuje výsledek dotazu SELECT
z
try { … } catch( SQLException e) { while( e != null ) { System.out.println(e.getMessage()); System.out.println(e.getSQLState()); System.out.println(e.getErrorCode()); e = e.getNextException(); } }
Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery( “SELECT * FROM uzivatel”); while( rs.next() ) { String login = rs.getString(“login”); String jmeno = rs.getString(“jmeno”); } rs.close(); stmt.close();
Datová vrstva informačního systému
13
Parametrizované příkazy z
z
z
14
PreparedStatement pstmt = con.prepareStatement( “INSERT … VALUES(?,?)”);
označené znakem ? indexované od 1
pstmt.clearParameters(); pstmt.setString(1, ”wal007”); pstmt.setNull(2, Types.VARCHAR);
INSERT INTO uzivatel(login,jmeno) VALUES(?, ?) Datová vrstva informačního systému
Datová vrstva informačního systému
Parametrizované příkazy
Možnost předkompilace – opakované provedení příkazu Parametry z
public class SQLException extends Exception
15
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
Datová vrstva informačního systému
16
4
Datová vrstva informačního systému
Transakce
Open Database Connectivity
try { con.setAutoCommit(false); stmt.executeUpdate(…); … con.commit(); } catch( SQLException e ) { con.rollback(); } Datová vrstva informačního systému
ODBC
17
Architektura ODBC
ODBC z z z z z
Aplikace
Specifikace API pro databáze Nezávislé na databázi a jazyce Databázově závislé ovladače Správce ovladačů – Driver Manager Založeno na specifikaci X/Open a ISO: SQL Call Level Interface (SQL/CLI)
Datová vrstva informačního systému
ODBC API Správce ovladačů ODBC API (SPI)
19
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
Ovladač
Ovladač
Ovladač
Zdroj dat
Zdroj dat
Zdroj dat
Datová vrstva informačního systému
20
5
Datová vrstva informačního systému
Typy ovladačů z
Typy zdrojů dat
Ovladače založené na souborech z z z
z
přímý přístup k datům (ovladač = zdroj dat) analýza a interpretace dotazů dBase
Systémové datové zdroje z z
z
Souborové datové zdroje z
z
Ovladače založené na SŘBD z z
z
dotazy se předávají ke zpracování SŘBD transformace ODBC SQL na konkrétní dialekt SQL Datová vrstva informačního systému
z
informace jsou uloženy v samostatném souboru (*.dsn) možnost sdílení, přenosu na jiné počítače identifikovány jménem souboru
21
Příklad systémového zdroje
Datová vrstva informačního systému
22
Postup
[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\Dais3] "Driver"="C:\\WINDOWS\\System32\\myodbc.dll" "Description"="Data Source for DAIS3" "Database"="dais3" "Server"="localhost" "User"="dais3" "Password"="dais3" "Port"="" "Option"="0" "Stmt"=""
Datová vrstva informačního systému
informace jsou uloženy přímo v systému (registry) identifikovány jménem zdroje
1. 2. 3. 4. 5. 6.
23
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
Připojení k datovému zdroji Inicializace Vytvoření a provedení dotazu Získání výsledku Ukončení transakce Odpojení od datového zdroje
Datová vrstva informačního systému
24
6
Datová vrstva informačního systému
Připojení k datovému zdroji
Inicializace aplikace
// Alokace zástupce pro správce ovladačů ODBC SQLHENV hEnv; SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&hEnv);
// Získání informací o SŘBD, ovladači, ... SQLCHAR dbms_name[40]; SQLGetInfo(hDbc, SQL_DBMS_NAME, dbms_name, sizeof(dbms_name), NULL);
// Deklarace požadované verze ODBC SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, 0); // Alokace zástupce pro databázové připojení SQLHDBC hdbc1; SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc); // Připojení k databázi SQLConnect(hDbc, database, SQL_NTS, user, SQL_NTS, password, SQL_NTS);
// Alokace zástupce pro příkaz (dotaz) SQLHANDLE hStmt; SQLAllocHandle(SQL_HANDLE_STMT,hDbc,&hStmt);
// jméno zdroje dat // uživatel // heslo
Datová vrstva informačního systému
25
Vytvoření a provedení dotazu z
Přímé provedení dotazu
// Svázání proměnných s výsledkem dotazu SQLCHAR jmeno[30]; SQLINTEGER jmeno_ind; SQLBindCol(hStmt, 1, SQL_C_CHAR, jmeno, sizeof(jmeno), &jmeno_ind);
Připravený dotaz
SQLCHAR* query = “SELECT jmeno FROM uziv WHERE login=?”; SQLPrepare(hstmt, query, SQL_NTS); SQLBindParameter(hStmt, 1, …); SQLExecute(hStmt);
Datová vrstva informačního systému
26
Získání výsledku
SQLCHAR query[] = “INSERT INTO …”; SQLExecDirect(hStmt, query, SQL_NTS); z
Datová vrstva informačního systému
// Čtení výsledků while ( SQLFetch(hStmt) != SQL_NO_DATA ) { if( jmeno_ind != SQL_NULL_DATA ) cout << jmeno; }
27
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
Datová vrstva informačního systému
28
7
Datová vrstva informačního systému
Odpojení od zdroje dat // uvolnění zástupce příkazu SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
PHP & MySQL
// odpojení od databáze SQLDisconnect(hDbc); // uvolnění zástupce příkazu SQLFreeHandle(SQL_HANDLE_DBC, hDbc); // uvolnění zástupce prostředí SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
Datová vrstva informačního systému
29
Přístup k databázím z PHP z
Modulární struktura z
z
Databáze MySQL MySQL Server
sdílené knihovny (.dll, .so)
Podpora mnoha databázových rozhraní z z z z z
ODBC MySQL, PostgreSQL Microsoft SQL Server Oracle, Sybase, Informix dBase Datová vrstva informačního systému
Tabulky Databáze
31
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
Datová vrstva informačního systému
32
8
Datová vrstva informačního systému
Správa databáze z
Standardní klienti z z z
z
// Připojení k serveru + autentizace mysql_connect("localhost", "uziv", "heslo");
mysql mysqladmin mysqldump
// Výběr databáze mysql_select_db(“databaze");
Aplikace s grafickým rozhraním z z
z
Připojení k databázi
MySQL Control Center WinMySQLAdmin
Aplikace s WWW rozhraním z
phpMyAdmin Datová vrstva informačního systému
33
Provedení dotazu
Datová vrstva informačního systému
Provedení dotazu
while( $r = mysql_fetch_object($h) ) { echo “$r->login: $r->jmeno\n”; }
$h = mysql_query($query); $n = mysql_num_rows($h); for( $i = 0; $i < $n; $i++) { $r = mysql_fetch_array($h); echo “
\n”; foreach( $r as $val ) echo “\t$val | \n”; echo “
\n”; }
mysql_free_result($h);
mysql_free_result($h);
$query = “SELECT login,jmeno FROM uziv”; $h = mysql_query($query);
Datová vrstva informačního systému
34
35
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
Datová vrstva informačního systému
36
9
Datová vrstva informačního systému
Další zdroje informací z
ODBC z z
z
JDBC z
z
www.microsoft.com/data/odbc/ www.unixodbc.org/
java.sun.com/products/jdbc
PHP & MySQL z z z
www.php.net www.mysql.com www.phpmyadmin.net Datová vrstva informačního systému
37
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
10