sql programozási felületek

Post on 09-Jan-2016

56 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

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

SQL programozási felületek

Henri Rousseau, ‘Az álom’

PHP

JDBC

ODBC

ADOESQL

DAOOLEDB

OCI

ADO

JSQLSQL

XSQL

TSQL

PL/SQL

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

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

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

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);}

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

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:

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;

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

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)

ODBC struktúra

ODBCDriver

manager

Driver 1

Driver 1

Driver 1

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

ODBC ODBC N

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()

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ó

ODBC források menedzselése

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

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)+"') ")

MS elérési felületek

SQLServer

ODBC OLEDB-D

OLEDBRDOJET

DAO

ODBC DAO/JET DAO RDO ADO

ADO felület

Universal Data Access

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

Objektum orientált szemléletű

ADO.Net környezet

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

Objektumok kapcsolata

Connection

Command

CommandText

Open()

CreateCommand()

BeginTransaction()

ConnectionString

CommandTimeout

TransactionCommandType

ExecuteNonQuery()

ExecuteReader()

Prepare()

CreateParameter()

DataParameter

DataReader

DataReader

Read()

NextResult()

Close()

RecordsAffected

DataRecord

FieldCount

GetName() getFieldType()

GetInt()

GetString()

Transaction

IsolationLevelCommit()

Rollback()

DataParameter

DbType Value

SourceColumn

{ 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();}

{ 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();}

DataSet (memória adatcache)

Tables Relations

Columns

Constraints

RowsPrimary Key

View

DataType

SizeDefaultValue

ReadOnly

AutoIncrement

FilterName

Attributes

BaseType

IsArray

ADO-VFP

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

JDBC

JDBC

Java

ODBCKapcsolati típusok

JDBC-ODBC

DBMS

JDBC-DBAPI

tiszta JDBC

Net JDBC

J-Net

D 1

D 1

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

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()); } }

top related