Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Adatbázis használat a webszervernél

Hasonló előadás


Az előadások a következő témára: "Adatbázis használat a webszervernél"— Előadás másolata:

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!


Letölteni ppt "Adatbázis használat a webszervernél"

Hasonló előadás


Google Hirdetések