Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Adatbázis használat a webszervernél
2
Web és adatbázis Webhez kell adatbázis
általában relációs adatbázis SQL interface használata fontos a hatékonyság Web saját maga is használ adatbázist alkalmazásszerver a bean-ek tárolására session-változók tárolására
3
Két szervertípus - két használat
1. generációs szerver cgi-bin scripteket használ, PERL nyelven nincs vagy nehézkes állapotprogramozás üzleti logika és oldalgenerálás összekeverve 2. generációs web alkalmazás szerveres megoldás, Java-ban könnyű állapotprogramozás változatos kapcsolat az adatbázishoz szétválasztva az üzleti logika és a megjelenítés (pl. JSP)
4
Hagyományos web
5
Cgi-bin megoldás PERL nyelvű programozás
általános DB/SQL modul használata konkrét adatbázishoz konkrét meghajtó könnyű kezelhetőség kapcsolat megnyitás utasítás megnyitás utasítás előkészület utasítás végrehajtás eredmények felhasználása utasítás lezárás kapcsolat lezárása
6
Előkészületek Adatbázis meghajtók beintegrálása DBI modul használata
Adatbázis kapcsolat létrehozása #!/usr/bin/perl use DBI; require("../cgi-lib.pl"); my $dbase = ’dbstudent'; ... my $dbh = DBI->connect("DBI:mysql:$dbase", $user, $pwd) or die ”Nem lehet kapcsolódni: $DBI::errstr\n";
7
Utasításkészítés SQL utasításokat adatként konkrétan leírni
paraméterek helyét ki lehet jelölni ?-lel my $sql = "select nev, beonev, tit, t20.reszlnev, t21.reszlnev from bekiat as t1, rszl as t20, rszl as t21, dolgozo, munkakor where erv = '1' AND t1.ig = ? AND t1.ig = t20.reszl AND t1.fooszt = t21.reszl AND t1.tsz = dolgozo.tsz AND t1.beo = munkakor.beo nev LIKE ? order by nev, t20.reszlnev";
8
A végrehajtás előkészítése
Kiválasztunk egy előkészített utasítás létrehozunk egy “DBI-utasítást” my $sql = "select nev, beonev, tit, t20.reszlnev, t21.reszlnev ; my $dbh = DBI->connect("DBI:mysql:$dbase", $user, $pwd) or die ”Nem megy a CONNECT statement: $DBI::errstr\n"; my $sth = $dbh->prepare($sql[0]) or die ”A SELECT nem megy: $dbh->errstr\n”;
9
Utasítás végrehajtás Konkrét paraméterek előállítása
paraméterek behelyettesítése my $sql = "select nev, beonev, tit, t20.reszlnev, t21.reszlnev ; my $dbh = ...; my $sth = $dbh->prepare($sql[0]) or die ”Az elökészítés nem megy: $dbh->errstr\n”; $sth->execute($ig, $kereso) or die ”Nem fut le a SELECT: $sth->errstr";
10
Eredmények kezelése Egy tábla-rekord adódik át egyszerre
sorrend a SELECT-ben definiált $sth->execute($ig, $kereso) or die ”Nem fut le a SELECT: $sth->errstr"; = $sth->fetchrow_array) { print "<tr>"; print "<td bgcolor=white><i><b>$row[2] $row[0]</b></i></td>"; print "<td bgcolor=white>$row[1]</td><td bgcolor=white> $row[3], $row[4]</td></tr>\n"; }
11
Befejezés Két fázis utasítás lezárása kapcsolat lezárása
$sth->execute($ig, $kereso) or die ”Nem fut le a SELECT: $sth->errstr"; = $sth->fetchrow_array) { } $sth->finish; $dbh->disconnect;
12
Java nyelvű alkalmazások
13
Adatbázis kapcsolatok
Egyedi „connector” technológia IBM-IMS-hez (hierarchikus adatbázis) LotusNotes adatbázis: RDBMS módosítva Általános SQL adatbázisokhoz általános és rendszerfüggetlen
14
SQL adatbázis kapcsolatok
Alsó szintű interface közvetlen kapcsolat: JDBC Magas interface szint adatbázis tábla és mezőszerkezet átírása Java objektumokba „mapper” program SQL-t nem is kell/lehet használni automatikus generálás off-line használat alsó szintű interface hívása
15
JDBC Java DataBase Connectivity
1996-ban 1.0 verzió, 1999-ben 2.0 verzió Sun/JavaSoft találmánya kiindulás az ODBC-ből CLI - X/Open Call Level Interface megvalósítva: MS-ODBC C nyelvű API nemcsak adatbázishoz: pl. Excel-hez
16
JDBC architektúra JDBC-API meghajtó (azaz adatbázis) független
adatbázis függőség a meghajtó behívásánál legalsó szinten konkrét “driver” pl. Oracle-driver, Sybase-driver több is működhet egyszerre használat is egyértelműen leírva java.sql csomagban
17
JDBC meghajtók közvetlen meghajtó JDBC-ODBC bridge hálózati meghajtó
távoli JDBC ODBC RDBMS RDBMS RDBMS
18
JDBC felhasználás az alkalmazás- szerverben
Összetett példa R M I J D B C R M I J D B C O D B C JDBC --- ODBC bridge JDBC felhasználás az alkalmazás- szerverben Excel tábla Internet Excel-szerver alkalmazás szerver
19
Kezelési szerkezet try { // meghajtó betöltés
// kapcsolat az adatbázishoz // utasítás létrehozása // eredmény létrehozása // eredmény elemzése } catch (SQLException e) { // kivételes esetek } finally { // utasítás bezárása // kapcsolat bezárása }
20
SQL és Java típusok Egyértelmű összerendelés
mindegyikhez get/set-hozzáférés SQL tipus Java tipus metódus neve VARCHAR String getString setString NUMERIC BigDecimal getBigDecimal setBigDecimal INTEGER int getInt setInt BIGINT long getLong setLong REAL float getFloat setFloat DATE java.sql.Date getDate setDate TIMESTAMP java.sql.TimeStamp getTimeStamp setTimeStamp
21
Előkészületek Meghajtó betöltése Kapcsolat kapcsolati URL
kapcsolat létrehozása Class.forName (“com.sybase.jdbc.SybDriver”); jdbc:<alprotokoll>:<alnév>:<gép>:<port>:<adatbázis> String dbnm = “jdbc:sybase:Tds:dbmachine:5001:dbstudent”; Connection con = DriverManager.getConnection (dbnm, “uname”, “passwd”);
22
Akciók az adatbázisban
Keresés executeQuery paramétere a SELECT utasítás Módosítás executeUpdate UPDATE és INSERT utasításokhoz Egyebek execute COMMIT, ROLLBACK kiadására
23
Keresés és eredménye Keresés Eredmény
Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery ( “select * from table1 where field1 like ‘e%’”); while (rs.next()) { System.out.println( rs.getString(1) + rs.getFloat(2)); } // while
24
Keresési formák Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery ( “select * from table1 where field1 like ‘e%’”); String namestart = i.getItem(); ResultSet rs = stmt.executeQuery ( “select * from table1 where field1 like ‘“ namestart + “%’”); PreparedStatement pstmt = con.preparedStatement( “select * from table1 where field1 like ? AND num = ?”); pstmt.setString (1, i.getItem()+”%”); pstmt.setInt (2, 2002); ResultSet rs = stmt.executeQuery ();
25
Eredmények kezelése Ciklusban történik a kiírás
egyes mezőkről tudni kell a típusát getXXX() interface (getInt, getByte, …) SQL-null és a Java-null nem azonos! mező sorszám while (rs.next() ){ if (!rs.wasNull()) { System.out.println(rs.getInt(2)); System.out.println(rs.getInt(“num”)); } else { ... } } mezőnév
26
Egyszerű példa import java.sql.*:
public class SimpleJDBC { public static main (String args[]) { try { Class.forName (“com.sybase.jdbc.SybDriver”); String dbid = “jdbc:sybase:Tds:dbmachine:5001:dbstudent”; Connection con = DriverManager.getConnenction (dbid, “uname”, “passwd”); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery ( “select * from table1 where field1 like ‘e%’”); while (rs.next()) { System.out.println(rs.getString(1) + rs.getFloat(2)); } // while } cactch (Exception e) { } } }
27
EJB Enterprise Java Beans SQL- és JDBC-kódírás nélkül
táblakezelés + tranzakciókezelés + perzisztencia + párhumazos hozzáférés + pool-ozás megoldása EJB-API meghatározza a formát EJB konténer biztosítja a futási környzetet
28
Middleware JDBC hívás alacsony szintűnek minősül Logikai interface
eltakarja a JDBC-t általános interface-t ad Ezt a middleware-t kell a servlet-nek, webservice-nek, stb. használni!
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.