• Keine Ergebnisse gefunden

Open Database Connectivity (ODBC)

N/A
N/A
Protected

Academic year: 2022

Aktie "Open Database Connectivity (ODBC)"

Copied!
11
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)
(2)

Open Database Connectivity (ODBC)

Idee:

API für eine DBMS, das ein Call-Level-Interface für die Ausführung von SQL-Befehlen darstellt

Vergleiche SQL/CLI

Bestandteil des SQL:1999 Standard

Angleichung mit ODBC geplant

Software-Architektur vergleichbar wie JDBC

Driver Manager und Driver für jedes angeschlossene DBMS

ODBC nicht objektorientiert, DBMS-Interface auf niedrigerem Level

Gefahr von Memory Leaks

(3)

Programmstruktur

SQLAllocEnv (&henv);

SQLAllocConnect (henv,&hdbc);

SQLConnect(hdbc,database_name,userId,password) SQLAllocStmt (hdbc,&hstmt);

SQLExecDirect (hstmt, ... SQL statement ... );

.

. verarbeite Ergebnisse .

SQLFreeStmt (hstmt,fOption);

SQLDisconnect (hdbc);

SQLFreeConnect (hdbc);

SQLFreeEnv (henv);

(4)

ODBC Funktionen

SQLAllocEnv()

allokiert und initialisiert Speicher für eine Environment Area, genutzt vom Driver Manager für Run-Time Informationen

liefert einen Handle zurück (in C: Pointer)

SQLAllocConnect()

allokiert Speicher für die Connection und liefert einen Connection Handle zurück, hdbc

SQLConnect()

lädt DB-Driver und verbindet sich mit dem DB-Server

auch mehrere Verbindungen zu DB-Managern möglich

SQLAllocStmt()

allokiert Speicher innerhalb des Drivers für ein SQL Statement und liefert einen Handle, hstmt, für dieses Statement zurück

(5)

ODBC Funktionen (Forts.)

SQLExecDirect()

bekommt einen Statement Handle und eine String-Variable für das eigentliche Statement

veranlaßt Prepare und Execute für das Statement im Server

Retrieval (SELECT), DML (UPDATE) und DDL-Befehle (CREATE) möglich

produziert ein Resultset, auf das durch Cursor zugegriffen werden kann

SQLDisconnect()

löst Verbindung zum Server

SQLFreeStmt(),SQLFreeConnect(),SQLFreeEnv()

Freigabe der Handle und des allokierten Speichers

(6)

Prepared Statements

Prepare Statement

SQLPrepare (hstmt, ... SQL statement ...);

kann Platzhalter ? beinhalten

Execute Statement

SQLExecute (hstmt);

Bereitstellen von Parametern an dynamisches SQL- Statement

SQLBindParameters (hstmt,1,SQL_PARAMETER_INPUT, SQL_C_SSHORT,SQL_SMALLINT,&int1);

(7)

Cursor

Daten werden über Cursor zurückgegeben

zusätzliche ODBC Funktionen, um Daten in Applikation zu bringen

SQLBindCol (hstmt,1,SQL_C_SSHORT,&int2);

bindet erste Spalte des ResultSet an Variable int2 SQLFetch (hstmt);

Cursor wird weitergesetzt, Werte der aktuellen Zeile werden in Host-Variablen gespeichert

wenn Variable nicht gebunden:

SQLGetData (hstmt,2,SQL_C_SSHORT,&int3);

(8)

Cursor Typen

STATIC

bei Ausführung von SELECT Berechnung des ResultSet, separat von Basistabelle abgespeichert

Aufruf von SQLFetch holt eine Zeile vom ResultSet

KEYSET_DRIVEN

bei Ausführung von SELECT wird Menge von Pointern auf Zeile der Basistabelle angelegt

Aufruf von SQLFetch folgt Pointer und holt Zeilen von Basistabelle

Änderungen in Basistabelle beim nächsten Fetch sichtbar

neue Datensätze nicht sichtbar (Insert-Anomalie)

DYNAMIC

(9)

Cursor-Verarbeitung

Setzen des Cursor-Typs:

SQLSetStmtOption (hstmt,SQL_CURSOR_TYPE,Option)

positionierte Updates durch nicht-statische Cursor

SQLExecDirect (hstmt1,“SELECT * FROM Employee \ FOR UPDATE OF Salary“);

nach einigen Fetch-Statements, Erhöhung des Gehalts um 1000 im aktuellen Datensatz

SQLExecDirect (hstmt2,“UPDATE Employee SET Salary = Salary + 1000 \

WHERE CURRENT OF employee_cursor“);

Verbindung des employee_cursor mit dem Statement Handle SQLSetCursor (hstmt1,employee_cursor);

(10)

Statusabfrage

Statusabfrage

RETCODE retcode1;

:

retcode1 = SQLConnect(...);

if (retcode != SQL_SUCCESS) { : do something

}

(11)

Ausführung von Transaktionen

Autocommit-Modus

ausschalten, wenn zwei oder mehr Statements zu Transaktion gruppiert werden sollen

SQLSetConnection (hdbc,SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF);

Isolation Level ändern

SQLSetConnectionOption (hdbc, SQL_TXN_ISOLATION,

SQL_TXN_REPEATABLE_READ);

Transaktionen beenden oder zurückrollen

SQLTransact (henv,hdbc,Action) Action = SQL_COMMIT oder SQL_ABORT

Referenzen

ÄHNLICHE DOKUMENTE

Schritt 2: Datenbankansicht ohne Dateiunterstützung, Datenquelle: ODBC. Steuerelemente auf

Im Klassenassistenten Membervariable für Steuerelemente festlegen. Franz Kohnle Seite 1 von

[r]

long m_ID; // MannschaftsID, Primaerschluessel CString m_Name; //

Semester jedoch LU Ärgernissen sei- lens dcs Vortragenden fulme \\ ird sich die tudienkommissiol1 in der nächslen Silzung mit diesem The- ma au einander etzen und

Kein Theoretiker ist jedoch so unschuldig, auch nur im Traum (und schon gar nicht öffentlich) an die Subversion der aktuellen Strukturen in der Kunstproduktion zu denken: des

Die Schülerinnen und Schüler notieren mögliche Themen für ihre Klasse/ihre Schule auf eine Karte und stimmen ab, zu welchem Thema sie ein Statement formulieren.. Welche

Raucher sind ein schlechtes Vorbild für jüngere Schüler... Strukturen zur Meinungsäußerung und Begründung. Bei einer Argumentation ist das Ziel, dass man seine Gesprächspartner