DB+frontend Inne języki H2. Bazy Danych i Systemy informacyjne Wykład 9. Piotr Syga

Podobne dokumenty
JAVA I BAZY DANYCH. MATERIAŁY:

JDBC (Java Database Connectivity vit )

Programowanie w języku Java. Bazy danych SQLite w Javie

Aplikacje bazodanowe. dr inż. Arkadiusz Mirakowski

JAVA bazy danych. na bazie: Język Java - Podstawy Programowania - Jacek Rumiński

Wprowadzenie. Rozdział 23 PDO. Podstawowe kroki aplikacji. Źródło danych

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Podstawy otwartych języków programowania Java Database Connectivity (JDBC)

Programowanie komputerów. Wykład 10: Dostęp do baz danych z poziomu aplikacji Java. (JDBC Database Access)

Typy sterowników. Rozdział 21 JDBC. Podstawowe kroki aplikacji. Historia. Program napisany w języku Java JDBC API. Menadżer sterowników JDBC

Metody dostępu do danych

Bazy danych w PHP. PHPMyAdmin

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Bazy danych wykład dwunasty

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Podejście obiektowe do relacyjnych baz danych Hibernate.

Łączenie z bazą danych przykładowa klasa infpolaczenie import java.sql.drivermanager; import java.sql.connection; import java.sql.

Połączenie z bazą danych

JDBC. Plan ćwiczenia. Wywoływanie poleceń SQL z języków programowania. Plan ćwiczenia cd. Wprowadzenie do laboratorium

Rozdział 9 Obsługa baz danych w języku Java

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

Bazy danych SQLite w Javie

Podstawy programowania III WYKŁAD 2

Java i bazy danych. 1. JDBC podstawy, transakcje. 2. Mapowanie relacyjno obiektowe. Hibernate, przykład.

Bartosz Jachnik - Kino

Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski. Zaawansowane Systemy Decyzyjne. Laboratorium

Java i jej wykorzystanie do tworzenia dynamicznych aplikacji Webowych

PL/SQL. Zaawansowane tematy PL/SQL

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Programowanie w języku Java

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Język SQL, zajęcia nr 1

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

PODSTAWY BAZ DANYCH 13. PL/SQL

Sprzeg podstawowy do baz danych w PHP Mateusz Sowa, 2007

Java Database Connectivity

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Hurtownia Świętego Mikołaja projekt bazy danych

Ćwiczenia 2 IBM DB2 Data Studio

Java Database Connectivity

JDBC - Obsługa baz danych w języku Java

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

Bazy Danych i Usługi Sieciowe

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

BAZA DANYCH SIECI HOTELI

Plan wykładu. Dostęp do bazy danych. Architektura JDBC. Dostęp do baz danych z aplikacji Java EE

SQL 4 Structured Query Lenguage

Wykład 05 Bazy danych

Programowanie Obiektowe Java

Zagadnienia. Konstrukcja bibliotek mysql i mysqli w PHP. Dynamiczne generowanie stron. Połączenie, zapytanie i sesja

Aplikacje Internetowe

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

JDBC w LoXiMie. Interfejs Java Database Connectivity dla systemu LoXiM. Adam Michalik 2008

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Bazy danych i usługi sieciowe

Programowanie Obiektowe Java

Wykład 8. SQL praca z tabelami 5

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Wzorce dystrybucji i wspólbieżności autonomicznej

Wykład 5. SQL praca z tabelami 2

Aplikacje Internetowe

przygotował: Bazy danych Paweł Kasprowski Wersja 2006Z

Bazy Danych i Systemy informacyjne Wykład 5. Piotr Syga

a) ile wynosiła populacja najbardziej i najmniej ludnego z województw (oraz jakie były ich nazwy)

Generowanie dokumentów XML z tabel relacyjnych - funkcje SQLX

Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Java rozszerzenie. dr. A. Dawid

Wykład 12. Programowanie serwera MS SQL 2005 w C#

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Protokół JDBC współpraca z relacyjnymi bazami danych

Obsługa błędów w SQL i transakcje. Obsługa błędów w SQL

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Protokół JDBC współpraca z relacyjnymi bazami danych lab4. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Wzorce logiki dziedziny

ORACLE (Wykład 1) aragorn.pb.bialystok.pl/~aonisko. Typy rozproszonych baz danych. Systemy klient-serwer. Klient-serwer: Przykład

Połączenia między bazami danych i programem w języku Java część 2

Projektowanie systemów baz danych

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Bazy danych - Materiały do laboratoriów VIII

Zaawansowany kurs języka Python

Wykład 5: PHP: praca z bazą danych MySQL

PHP: bazy danych, SQL, AJAX i JSON

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

15. Funkcje i procedury składowane PL/SQL

METODY PROGRAMOWANIA

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Protokół JDBC współpraca z relacyjnymi bazami danych lab3

Transkrypt:

Bazy Danych i Systemy informacyjne Wykład 9 Piotr Syga 30.11.2018

API Przykłady API ODBC JDBC OLEDB ADO.NET data provider

API Funkcjonalności Komponenty Główne komponenty odpowiadające za komunikację API/data provider baza danych: Connector Command Executor Data Reader Data Adapter Typy zapytań Ze względu na przechowywanie i wymagany preprocessing wyróżniamy 3 typy zapytań: Statement PreparedStatement CallableStatement

JDBC Sterowniki Do połączenia z każdą bazą, JDBC wymaga osobnego sterownika, który odpowiada za połączenie oraz komunikację pomiędzy Javą a bazą danych. Dostępne sterowniki należą do jednego z czterech typów:

JDBC Sterowniki Do połączenia z każdą bazą, JDBC wymaga osobnego sterownika, który odpowiada za połączenie oraz komunikację pomiędzy Javą a bazą danych. Dostępne sterowniki należą do jednego z czterech typów: Typ 1 łącznik JDBC ODBC, konwertujący metody JDBC na funkcję uniwersalnego API Przykład: sun.jdbc.odbc.jdbcodbcdriver +: uniwersalność -: konieczność translacji (czas działania), wymagany dostęp do ODBC, wycofywane wsparcie Typ 2 natywne API (wykorzystuje pakiety po stonie klienta) Przykład: Oracle Call Interface +: szybszy niż Typ 1 -: wymóg bibliotek po stronie klienta (dopasowanych do bazdy danych), zależny od platformy, nie obsługuje apletów

JDBC Sterowniki Do połączenia z każdą bazą, JDBC wymaga osobnego sterownika, który odpowiada za połączenie oraz komunikację pomiędzy Javą a bazą danych. Dostępne sterowniki należą do jednego z czterech typów: Typ 3 wykorzystanie pośrednika Przykład: com.jw.client, com.jw.server, com.jw.client.jwdriver +: niezależność od platformy, niezależność od typu bazy danych (komunikacja z pośrednikiem wyłacznie Java) -: obecność pośrednika, opóźnienia komunikacyjne, obsługa konkretnej bazy danych na pośredniku Typ 4 bezpośrednia komunikacja w Javie Przykład: oracle.jdbc.driver.oracledriver (:thin:) +: szybkość, niezależność od platformy, brak pośrednika, debugowanie -: osobne sterowniki do każdej bazy, prawa autorskie Lista sterowników Oracle, MySQL Connector/J

JDBC Przykład Select import java.sql.connection; import java.sql.statement; import java.sql.resultset; public class JdbcExample { public static void main(string[] args) { try ( Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/bazatestowa", "user", "pass"); Statement stmt = conn.createstatement(); ) { String testquery = "Select name, lastname, score From Tests"; ResultSet res = stmt.executequery(testquery); int rowcount = 0; while(res.next()) { String n = res.getstring("name"); String l = res.getstring("lastname"); int score = res.getint("score"); /*... */ ++rowcount; catch(sqlexception ex) { ex.printstacktrace();

JDBC Przykład Update, Insert, Delete import java.sql.*; public class JdbcExampleB { public static void main(string[] args) { try ( Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/bazatestowa", "user", "pass"); Statement stmt = conn.createstatement(); ) { String upquery = "Update Tests Set mark = Ok Where score>10"; int upcounter = stmt.executeupdate(upquery); System.out.println(upcounter + " passed"); String delquery = "Delete From Tests Where score is NULL"; int delcounter = stmt.executeupdate(delquery); inquery = "Insert Into Tests (name, lastname, score) " + "values ( Jan, Kowalski, 7)" + "( Jan, Nowak,20)"; stmt.executeupdate(inquery); catch(sqlexception ex) { ex.printstacktrace();

JDBC Przykład Tworzenie tabel import java.sql.*; public class JdbcExampleC { public static void main(string[] args) { try ( Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/bazatestowa", "user", "pass"); Statement stmt = conn.createstatement(); ) { String cdb = "Create Database tmp"; stmt.executeupdate(cdb); String ctab = "Create Table tmp.albums " + "(name varchar(50) NOT NULL, " + "band int NOT NULL, " + "release date, " + "PRIMARY KEY (name,band), " + "FOREIGN KEY (band) REFERENCES " + "tmp.bands(id))"; stmt.executeupdate(ctab); catch(sqlexception ex) { ex.printstacktrace();

JDBC PreparedStatement przypomnienie Możemy stworzyć uniwersalne kwerendy do Update ów, Insertów,... String AlmostUniversalUpdateStatement = "Update?" + "Set kol1 =? " + "Where ID =?"; try { con.setautocommit(false); upstmt = con.preparestatement(almostuniversalupdatestatement); upstmt.setstring(1, Tab1 ); upstmt.setint(2, 100); upstmt.setint(3, 1); upstmt.executeupdate(); upstmt.setstring(1, Tab1 ); upstmt.setint(2, 73); upstmt.setint(3, 2); upstmt.executeupdate(); con.commit(); catch (SQLException e ) { /*... */ Jak zrobić całkowicie uniwersalny Update? Co z bezpieczeństwem?

JDBC Obsługa błędów Oracle docs public static void printsqlexception(sqlexception ex) { for (Throwable e : ex) { if (e instanceof SQLException) { if (ignoresqlexception( ((SQLException)e). getsqlstate()) == false) { e.printstacktrace(system.err); System.err.println("SQL State: " + ((SQLException)e).getSQLState()); System.err.println("Error Code: " + ((SQLException)e).getErrorCode()); System.err.println("Message: " + e.getmessage()); Throwable t = ex.getcause(); while(t!= null) { System.out.println("Cause: " + t); t = t.getcause();

JDBC Warto przejrzeć typy danych, tablice, struktury, mapy procedury składowane transakcje Process, Runtime wywołanie msqldump SQLXML

PHP PDO PHP Data Objects Rozszerzenie PHP umożliwiające połączenie z szeregiem różnych baz danych za pomocą stałego interfejsu lista sterowników.

PHP PDO połączenie <?php try { $dbh = new PDO( mysql:host=localhost;dbname=test,\ $user, $pass); foreach($dbh->query( SELECT * from FOO ) as $row) { print_r($row); $dbh = null; catch (PDOException $e) { print "Error!: ". $e->getmessage(). "<br/>"; die();?>

PHP PDO Prepared Statement <?php try { $dbh = new PDO( mysql:host=localhost;dbname=test,\ $user, $pass); $stmt = $dbh->prepare( SELECT * FROM FOO ); $stmt->execute(); $dbh = null; //... catch (PDOException $e) { print "Error!: ". $e->getmessage(). "<br/>"; die();?> Uwaga: Mimo $dbh = null; połączenie nie zostanie zerwane do czasu $stmt = null; lub końca poleceń

PHP PDO transakcje <?php try { $dbh = new PDO( odbc:sample, db2inst1, ibmdb2, array(pdo::attr_persistent => true)); catch (Exception $e) { die("connection error: ". $e->getmessage()); try { $dbh->setattribute(pdo::attr_errmode, PDO::ERRMODE_EXCEPTION); $dbh->begintransaction(); $dbh->exec("insert Into people (PESEL, imię, nazwisko, data) Values ( 66010100000, Jan, Kowalski, 1966-01-01 )"); $stmt = $dbh->prepare("insert Into staff (PESEL, occupation, salary) Values (:p, :o, :s)"); $stmt->bindparam( :p, $pes); $stmt->bindparam( :o, $occ); $stmt->bindparam( :s, $sal); $pes = 66010100000 ; $occ = sprzedawca ; $sal = 3000; $stmt->execute(); $dbh->commit(); catch (Exception $e) { $dbh->rollback(); echo "Failed: ". $e->getmessage();?> Czy transakcja rzeczywiście zadziała dopiero przy $dbh->commit();?

PHP PDO organizacja danych <?php function readdata($dbh) { $sql = SELECT imie, nazwisko, wzrost FROM ludzie ; try { $stmt = $dbh->prepare($sql); $stmt->execute(); $stmt->bindcolumn(1, $name); $stmt->bindcolumn(2, $lname); $stmt->bindcolumn( wzrost, $h); while ($row = $stmt->fetch(pdo::fetch_bound)) { $data = $name. "\t". $lname. "\t". $h. "\n"; print $data; catch (PDOException $e) { print $e->getmessage(); readdata($dbh);?> Uwaga: W analogiczny sposób możemy wiązać wartości bindvalue.

PHP Warto przejrzeć kursory, fetch atrybuty quote(), rowcount() obsługa błędów, klasy wyjątków

Python Pakiety Poza interpreterem i silnikiem bazy danych potrzebne są: python-mysqldb python-mysqldb-dbg Konektory i interfejsy są dostępne również na stronach dialektu i języka.

Python Łączenie z bazą #!/usr/bin/python import _mysql import sys try: con = _mysql.connect( localhost, user, pass, bazatestowa ) con.query("select VERSION()") result = con.use_result() print "MySQL version: %s" % \ result.fetch_row()[0] except _mysql.error, e: print "Error %d: %s" % (e.args[0], e.args[1]) sys.exit(1) finally: if con: con.close()

Python Kursory #!/usr/bin/python import MySQLdb as mdb import sys try: con = mdb.connect( localhost, user, pass, bazatestowa ) kursor = con.cursor() kursor.execute("select PESEL, salary From staff") person, sal = kursor.fetchone() while person is not None: print "Pracownicy: %s %d" % (person, sal) person, sal = kursor.fetchone() except mdb.error, e: print "Error %d: %s" % (e.args[0], e.args[1]) sys.exit(1) finally: if con: con.close()

Python Kursory #!/usr/bin/python import MySQLdb as mdb import sys try: con = mdb.connect( localhost, user, pass, bazatestowa ) kursor = con.cursor() kursor.execute("select PESEL, salary From staff") person, sal = kursor.fetchone() while person is not None: print "Pracownicy: %s %d" % (person, sal) person, sal = kursor.fetchone() except mdb.error, e: print "Error %d: %s" % (e.args[0], e.args[1]) sys.exit(1) finally: if con: con.close() Co dzieje się z kursor po ostatnim wierszu? kursor.close()

Python Kursory przydatne metody cursor.description cursor.rowcount cursor.statement cursor.column_names cursor.callproc

Python cursor.execute stmt = "SELECT * FROM staff WHERE pesel = %(p)s" cursor.execute(stmt, { p : 66010100000 ) stmt = "INSERT INTO staff (pesel, salary) VALUES (%s, %s)" data = [ ( 77010100000, 4000), ( 88010100000, 3000), ( 99010100000, 2000), ] cursor.executemany(stmt, data)

Inne języki C++ Haskell NodeJS Julia Go

Wprowadzenie Zastosowanie aplikacje webowe Android wsparcie Hibernate Możliwe serwery konsola (Webserver) klient PostgreSQL architektura klient server via TCP

Server TCP import org.h2.tools.server; /* importy */ Server svr = Server.createTcpServer(args).start();/* start serwe /* operacje */ svr.stop(); /* zatrzymanie */

Połączenie Korzystamy ze sterownika org.h2.driver import java.sql.*; public class Test { public static void main(string[] a) throws Exception { Connection conn = \ DriverManager.getConnection("jdbc:h2:~/baza", "user", "pass"); /* operacje analogicznie do przykładów JDBC z początku wykładu */ conn.close();

Backup & Restore konsola: java -cp h2*.jar org.h2.tools.backup (Więcej informacji o narzędziach konsolowych po wywołaniu z opcją -?) script tool: java org.h2.tools.script -url jdbc:h2: /test -user <user_name> -script test.zip -options compression zip (Uwaga: można wywołać z poziomu SQL za pomocą SCRIPT) Backup On-line: BACKUP TO backup.zip

Backup & Restore konsola: java -cp h2*.jar org.h2.tools.restore (Uwaga: Jeśli baza jest uszkodzona, próba odtworzenia: org.h2.tools.recover) script tool: java org.h2.tools.runscript -url jdbc:h2: /test -user <user_name> -script test.zip -options compression zip