Title: SQL programoz
1SQL programozási felületek
2ADO
ESQL
OCI
PHP
JDBC
ADO
ODBC
SQL
JSQL
XSQL
PL/SQL
DAO
OLEDB
TSQL
Henri Rousseau, Az álom
3EXEC SQL UPDATE tabla SET .. if (res lt 0)
E-SQL
DEFINE CLASS sracs AS GRID sracs.RECORDSOURCES
ELECT
OPI
re SQLEXECUTE(cs, SELECT )
CLI
O-CLI
re CON.executeQuery(SELECT )
DBMS
ODBC
SQL
JDBC
native
4Beá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.errcode0)
printf(Sikeres beszuras\n)
DBMS
5Beágyazott SQL rendszerek struktúrája
Forrás állomány gazdanyelv SQL
Elofordító
Gazdanyelvi forrás
Fordító
Object gépi kód
Linker
DBMS Library
EXE állomány
DBMS
KL
6Gazdanyelvi 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)
7- több rekord jön át Kurzor mechanizmus
DBMS
Alkalmazás
kurzor
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 arua WHERE CURRENT
OF k1 EXEC SQL CLOSE k1
8Közvetett hibakezelés WHENEVER hiba
valasz SQLERROR, NOT FOUND STOP, CONTINUE,
GOTO c, DO fv indikátor változók r1r2
WHENEVER NOT FOUND GOTO ki while () EXEC SQL
FETCH k1 INTO r1e1, a1 if (e1gt0)
printf (rszs ard,r1,a1) ki
9Beágyazott SQL mintapélda
EXEC SQL DECLARE autokurz CURSOR FOR SELECT
tip, ar FROM auto WHERE tip LIKE 'FIAT' OR tip
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,aaraai if (aai lt 0) continue
if (tip0 'F') EXEC SQL UPDATE auto
SET ar ar1.15 WHERE CURRENT OF
autokurz else EXEC SQL UPDATE auto SET
ar ar1.12 WHERE CURRENT OF
autokurz vege EXEC SQL CLOSE autokurz
10ODBC CLI
Open Database Connectivity (MS, 1993)
Célja egységes API elérési felület biztosítása a
különbözo relációs jellegu adatforrások felé (a
heterogenitási problémák leküzdése)
Oracle SQLServer Informix DB2 Sybase VFP Access Ex
cel Txt
ODBC
11Elvégzendo funkciók
ODBC
INSERT
APPEND
parancs konverzió adat konverzió kapcsolat
felvétel funkció bovítés hibakezelés információ
nyújtás párhuzamosság
DATETIME
DATE
SQLCONNECT
CONNECT
ISOLATION LEVEL
UPDATE
SELCET
ERROR()
SQLTABLES
SELECT
SQLCONNECT(1) SQLCONNECT(2)
12ODBC struktúra
ODBC
Driver 1
Driver manager
Driver 1
Driver 1
ODBC
ODBC
N
Egylépcsos
Kétlépcsos
13ODBC API (C)
Kapcsolattartás handlerek
session h.
connection h.
connection h.
command h.
command h.
command h.
sqlExecDirect(p,parancs) sqlExec() sqlFetch(p) sql
BindCol() sqlGetData() sqlError() sqlSetStmtOption
() sqlTables()
e sqlAllocEnv() c sqlAllocConnect(e) p
sqlAllocStmt(c) sqlFreeEnv() sqlFreeConnect() sqlF
reeStmt() sqlConnect(c,elérés) sqlPrepare()
14SQLAllocEnv(henv) //session létesítés SQLAllocCo
nnect(henv,hdbc) //kapcsolat leíró
foglalás SQLConnect(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ás for (rcSQLFetch(hstmt)rcSQL_SUCCES
S rcSQLFetch(hstmt)) //rekordok lekérdezése
SQLGetData(hstmt,1,SQL_C_CHAR,SzData,
Siyeof(sydata),cbData) //mezo lekérdezése
MessageBox(NULL,syData,ODBC,MB_OK) //az
eredmény kiírása SQLFreeStmt(hstmt,SQL_DROP) /
/parancs leírás SQLDisconnect(hdbe) //lekapcsolód
ás SQLFreeConnet(hdbe) //leíró
felszabadítás SQLFreeEno(henv) //session leíró
15ODBC források menedzselése
16VFP-ODBC
egyszerusített nyilvántartás - egy leíró
struktúra (egész típusú azonosító) egyszerusített
adatkezelés - VFP lokális kurzorba tölti át az
eredményt
hdbeSQLConnect(DSN, felhasználó,
jelszó) SQLExec(hdbc,SQL,cursornev) SQLColumns(h
dbc,tabla) SQLCommit (hdbc) SQLTables(hdbc) SQ
LSETProp(hdbc,parameter,ertek) SQLGetProp(hdbe,par
meter) SQLRollback(hdbc) SQLDisConnect(hdbc)
17pw allt(thisform.jszo.value) con
sqlconnect("LocalServer","ujabb",pw) if con lt 0
endif p sqlexec(con,"SELECT max(kod) db
FROM dolg","cu1") if p gt 0 select cu1 kod
cu1.db 1 endif p sqlexec(con,"INSERT INTO
DOLG VALUES(" allt(str(kod)) ",'"
allt(thisform.nev.value)"') ")
18MS elérési felületek
ODBC
DAO/JET
DAO
RDO
ADO
DAO
OLEDB
RDO
JET
ODBC
OLEDB-D
SQLServer
19ADO felület
Universal Data Access
- RDBMS
- OODBMS
- ISAM
- MAPI
- LDAP
- XML
-
Objektum orientált szemléletu
ADO.Net környezet
20ADO.Net objektum modell
Framework Data Provider (adatkapcsolat) -
Connection - Error, Property - Command -
Parameter, Property - DataReader - Field,
Property - DataAdapter DataSet (lokális
kezelés) - DataTable - DataRelationCollection
21Objektumok kapcsolata
DataReader
Connection
ExecuteNonQuery()
ExecuteReader()
CreateCommand()
Command
Open()
Prepare()
BeginTransaction()
CreateParameter()
CommandText
ConnectionString
CommandType
Transaction
CommandTimeout
DataParameter
22RecordsAffected
DataReader
NextResult()
FieldCount
GetInt()
Close()
Read()
DataRecord
GetString()
GetName()
getFieldType()
Transaction
Commit()
DataParameter
IsolationLevel
SourceColumn
Rollback()
DbType
Value
23 SqlConnection nW new SqlConnection (
Data SourceLocalHost,.) 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()
24 OleDbConnection nW new OleDbConnection
() nW.Open() OleDbCommand sC new
OleDbComamnd(nul, nW) sC.CommandText
INSERT INTO VALUES(_at_i,)
sC.Parameters.Add(_at_i,11) sC.Prepare()
sC.ExecuteNonQuery() sC.Parameters0.Value
13 sC.ExecuteNonQuery() nW.Close()
25DataSet (memória adatcache)
Tables
View
Relations
Rows
Primary Key
Constraints
Columns
FilterName
ReadOnly
DataType
Attributes
AutoIncrement
Size
BaseType
DefaultValue
IsArray
26ADO-VFP
Con CREATEOBJECT(ADODBCONNECTION)
registry HKEY_CLASSES_ROOT
27JDBC
Kapcsolati típusok
ODBC
JDBC
D 1
JDBC-ODBC
DBMS
D 1
Java
JDBC-DBAPI
J-Net
Net JDBC
tiszta JDBC
28JDBC API (Java)
Logikailag olyan objektum szerkezet mint az
ADO-nál
gazdagabb metódus és tulajdonságkészlet
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)
29 public static void main(String args)
String url "jdbcodbchinfodbc" try
Class.forName("sun.jdbc.odbc.JdbcOdbcD
river") Connection con
DriverManager.getConnection(url,"scott","tige
r") 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())