sql programozási felületek

29
SQL programozási felületek

Upload: ornice

Post on 09-Jan-2016

56 views

Category:

Documents


2 download

DESCRIPTION

SQL programozási felületek. ADO. ESQL. OCI. PHP. JDBC. ADO. ODBC. SQL. JSQL. XSQL. PL/SQL. DAO. OLEDB. TSQL. Henri Rousseau, ‘Az álom’. EXEC SQL UPDATE tabla SET .. if (res < 0) {…. E-SQL. DEFINE CLASS sracs AS GRID sracs.RECORDSOURCE=”SELECT …. OPI. CLI. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: SQL programozási felületek

SQL programozási felületek

Page 2: SQL programozási felületek

Henri Rousseau, ‘Az álom’

PHP

JDBC

ODBC

ADOESQL

DAOOLEDB

OCI

ADO

JSQLSQL

XSQL

TSQL

PL/SQL

Page 3: SQL programozási felületek

DBMSSQL

EXEC SQL UPDATE tabla SET ..if (res < 0) {…

DEFINE CLASS sracs AS GRID sracs.RECORDSOURCE=”SELECT …

re = SQLEXECUTE(cs, ”SELECT * …”)

ODBC

JDBC

re = CON.executeQuery(”SELECT * …”)

native

E-SQL

CLI

O-CLI

OPI

Page 4: SQL programozási felületek

Beágyazott SQL

SQL parancsok kiadása programból:

- gazda nyelvi környezetbe beépített SQL parancsok - beágyazott SQL : interaktív SQL szintaktikát követ- CLI: függvényeket definiál az adatkapcsolathoz

3GL program scanf(”%d”,&lv);… INSERT INTO ARU VALUES(C.NEXTVAL,:lv);if (sqlca.errcode==0) { printf(“Sikeres beszuras\n”);}

DBMS

Page 5: SQL programozási felületek

KL

Beágyazott SQL rendszerek struktúrája

Forrás állomány = gazdanyelv + SQL

Gazdanyelvi forrásElőfordító

Object gépi kódFordító

EXE állományLinker DBMS Library

DBMS

Page 6: SQL programozási felületek

Gazdanyelvi változók deklarációja és beépítése

Adatok fogadása- egy rekord jön át:SELECT m-lista INTO v-lista FROM …;

EXEC SQL BEGIN DECLARE SECTION; int lv;EXEC SQL END DECLARE SECTION;main() { printf (“Kerem a tipust:”); scanf(”%s”,&tip); EXEC SQL SELECT COUNT(*), MIN(ar) INTO :db, :mar FROM AUTO WHERE tipus = :tip; printf (“Db = %d Max ar = %d\n”, db, mar);}

Page 7: SQL programozási felületek

EXEC SQL DECLARE CURSOR k1 FOR SELECT rsz, ar FROM auto FOR UPDATE OF ar; …OPEN k1;while () { EXEC SQL FETCH k1 INTO :r1, :a1; EXEC SQL UPDATE auto SET ar=:ua WHERE CURRENT OF k1;}EXEC SQL CLOSE k1;

- több rekord jön át: Kurzor mechanizmus

DBMS Alkalmazáskurzor

Page 8: SQL programozási felületek

Közvetett hibakezelés

WHENEVER hiba valasz;SQLERROR, NOT FOUNDSTOP, CONTINUE, GOTO c, DO fv

indikátor változók : :r1:r2

WHENEVER NOT FOUND GOTO ki;while () {

EXEC SQL FETCH k1 INTO :r1:e1, :a1; if (e1>0) printf (”rsz=%s ar=%d”,r1,a1);}ki:

Page 9: SQL programozási felületek

Beágyazott SQL mintapélda

EXEC SQL DECLARE autokurz CURSOR FOR SELECT tip, ar FROM auto WHERE tip LIKE 'FIAT%' ORtip LIKE 'LADA%' FOR UPDATE OF ar;

EXEC SQL OPEN autokurz;EXEC SQL WHENVER NOT FOUND GOTO vege;while (1) { EXEC SQL FETCH autokurz INTO :atip,:aar:aai; if (aai < 0) continue; if (tip[0] == 'F') { EXEC SQL UPDATE auto SET ar = ar*1.15 WHERE CURRENT OF autokurz; } else { EXEC SQL UPDATE auto SET ar = ar*1.12 WHERE CURRENT OF autokurz; }}vege: EXEC SQL CLOSE autokurz;

Page 10: SQL programozási felületek

ODBC CLI

Open Database Connectivity (MS, ~1993)

Célja egységes API elérési felület biztosítása a különböző relációs jellegű adatforrások felé (a heterogenitási problémák leküzdése)

ODBC

OracleSQLServerInformixDB2SybaseVFPAccessExcelTxt

Page 11: SQL programozási felületek

ODBC

Elvégzendő funkciók

parancs konverzióadat konverziókapcsolat felvételfunkció bővítéshibakezelésinformáció nyújtáspárhuzamosság

INSERT APPEND

DATETIME DATESQLCONNECT

ISOLATION LEVELCONNECT… UPDATE

SELCET ERROR()SQLTABLES SELECT

SQLCONNECT(1)SQLCONNECT(2)

Page 12: SQL programozási felületek

ODBC struktúra

ODBCDriver

manager

Driver 1

Driver 1

Driver 1

Egylépcsős Kétlépcsős

ODBC ODBC N

Page 13: SQL programozási felületek

ODBC API (C)

Kapcsolattartás: handlereksession h.

connection h. connection h.

command h. command h.command h.

e = sqlAllocEnv()c = sqlAllocConnect(e)p = sqlAllocStmt(c)sqlFreeEnv()sqlFreeConnect()sqlFreeStmt()sqlConnect(c,elérés)sqlPrepare()

sqlExecDirect(p,parancs)sqlExec()sqlFetch(p)sqlBindCol()sqlGetData()sqlError()sqlSetStmtOption()sqlTables()

Page 14: SQL programozási felületek

SQLAllocEnv(&henv); //session létesítésSQLAllocConnect(henv,&hdbc); //kapcsolat leíró foglalásSQLConnect(hdbc,(unsigned char*) ”HELLO”,SQL_NTS,NULL,0, NULL,0); SQLAllocStmt(hdbc,&hstmt); //parancs leíró foglalás

SQLExecDirect(nstmt,(unsigned char*) “SELECT * FROM Minta “, SQL_NTS); //parancs végrehajtásfor (rc=SQLFetch(hstmt);rc==SQL_SUCCESS;rc=SQLFetch(hstmt)){ //rekordok lekérdezése SQLGetData(hstmt,1,SQL_C_CHAR,SzData, Siyeof(sydata),&cbData); //mező lekérdezése MessageBox(NULL,syData,”ODBC”,MB_OK); //az eredmény kiírása}

SQLFreeStmt(hstmt,SQL_DROP); //parancs leírásSQLDisconnect(hdbe); //lekapcsolódásSQLFreeConnet(hdbe); //leíró felszabadításSQLFreeEno(henv) //session leíró

Page 15: SQL programozási felületek

ODBC források menedzselése

Page 16: SQL programozási felületek

VFP-ODBC

hdbe=SQLConnect(DSN, felhasználó, jelszó)SQLExec(hdbc,”SQL”,cursornev)SQLColumns(hdbc,”tabla”)SQLCommit (hdbc)SQLTables(hdbc)SQLSETProp(hdbc,parameter,ertek)SQLGetProp(hdbe,parmeter)SQLRollback(hdbc)SQLDisConnect(hdbc)

egyszerűsített nyilvántartás - egy leíró struktúra (egész típusú azonosító)

egyszerűsített adatkezelés- VFP lokális kurzorba tölti át az eredményt

Page 17: SQL programozási felületek

pw = allt(thisform.jszo.value)con = sqlconnect("LocalServer","ujabb",pw)if con < 0 …… endifp = sqlexec(con,"SELECT max(kod) db FROM dolg","cu1")if p > 0 select cu1 kod = cu1.db + 1endifp = sqlexec(con,"INSERT INTO DOLG VALUES(" + allt(str(kod))+",'" + allt(thisform.nev.value)+"') ")

Page 18: SQL programozási felületek

MS elérési felületek

SQLServer

ODBC OLEDB-D

OLEDBRDOJET

DAO

ODBC DAO/JET DAO RDO ADO

Page 19: SQL programozási felületek

ADO felület

Universal Data Access

- RDBMS- OODBMS- ISAM- MAPI - LDAP- XML- …

Objektum orientált szemléletű

ADO.Net környezet

Page 20: SQL programozási felületek

ADO.Net objektum modell

Framework Data Provider: (adatkapcsolat)- Connection

- Error, Property- Command

- Parameter, Property- DataReader

- Field, Property

- DataAdapter

DataSet: (lokális kezelés)- DataTable

- DataRelationCollection

Page 21: SQL programozási felületek

Objektumok kapcsolata

Connection

Command

CommandText

Open()

CreateCommand()

BeginTransaction()

ConnectionString

CommandTimeout

TransactionCommandType

ExecuteNonQuery()

ExecuteReader()

Prepare()

CreateParameter()

DataParameter

DataReader

Page 22: SQL programozási felületek

DataReader

Read()

NextResult()

Close()

RecordsAffected

DataRecord

FieldCount

GetName() getFieldType()

GetInt()

GetString()

Transaction

IsolationLevelCommit()

Rollback()

DataParameter

DbType Value

SourceColumn

Page 23: SQL programozási felületek

{ SqlConnection nW = new SqlConnection ( ”Data Source=LocalHost”,….); SqlCommand sC = nW.CreateCommand(); sC.CommandText = ”SELECT ar FROM b …”; nW.Open(); SqlDataReader mR = sC.ExecuteReader();

while (mR.Read()) { …. mR.GetInt(1); … mR.GetString(..)… } mR.Close(); nW.Close();}

Page 24: SQL programozási felületek

{ OleDbConnection nW = new OleDbConnection (…); nW.Open(); OleDbCommand sC = new OleDbComamnd(nul, nW); … sC.CommandText = ”INSERT INTO … VALUES(@i,…)”; sC.Parameters.Add(”@i”,11); sC.Prepare(); sC.ExecuteNonQuery(); … sC.Parameters[0].Value = 13; sC.ExecuteNonQuery();

nW.Close();}

Page 25: SQL programozási felületek

DataSet (memória adatcache)

Tables Relations

Columns

Constraints

RowsPrimary Key

View

DataType

SizeDefaultValue

ReadOnly

AutoIncrement

FilterName

Attributes

BaseType

IsArray

Page 26: SQL programozási felületek

ADO-VFP

Con = CREATEOBJECT(”ADODB:CONNECTION”) && registry : HKEY_CLASSES_ROOT

Page 27: SQL programozási felületek

JDBC

JDBC

Java

ODBCKapcsolati típusok

JDBC-ODBC

DBMS

JDBC-DBAPI

tiszta JDBC

Net JDBC

J-Net

D 1

D 1

Page 28: SQL programozási felületek

JDBC – API (Java)

Class. forName(”.. driver…”)c = DriverManager.getConnection(elérés)s = c.createStatement()r = s.executeQuery(parancs)r.next()r.getStrting(mezo)r.getInt(mezo)try {…} catch (SQLException e) { }

Logikailag olyan objektum szerkezet mint az ADO-nál

gazdagabb metódus és tulajdonságkészlet

Page 29: SQL programozási felületek

public static void main(String[] args) { String url = "jdbc:odbc:hinfodbc"; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection(url,"scott","tiger"); rs = stmt.executeQuery("SELECT * FROM dolgozo"); while (rs.next()) { int i = rs.getInt("kod"); String s = rs.getString("nev");

System.out.println(i + " : " + s + " : " + j); } rs.close(); stmt.close(); con.close(); } catch (SQLException ex) { System.out.println("SQL hiba:" + ex.getSQLState()); } }