Upload
ornice
View
46
Download
2
Embed Size (px)
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
Citation preview
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()); } }