ECPG
ECPG är standarden, i den inbyggda PostgreSQL- databasen, klientprogrammeringsgränssnitt för inbäddning av SQL i program skrivna i programmeringsspråket C. Det ger möjlighet att komma åt PostgreSQL-databasen direkt från C-koden i applikationen med hjälp av SQL-kommandon.
Användande
Användningen kan delas upp i 2 steg. Först måste en .pgc-fil skapas, som består av C -kod med inbäddad SQL- kod. I en sådan fil kommer SQL-kod att infogas direkt i programmets C-kod. SQL-kommandona måste infogas i C-koden på följande sätt:
// ... C-kod ... EXEC SQL ; // ... C-kod ...
Ett exempel på hur man ansluter till en databas:
EXEC SQL ANSLUTA TILL databasnamn [ @ värdnamn ][: port ] [ AS anslutningsnamn ] [ ANVÄNDARnamn ] ;
Den inbäddade SQL-delen kommer att bearbetas genom ECPG-förprocessor där SQL-koden kommer att ersättas med anropen till ecpg-biblioteket (libecpg.a eller libecpg.so). .pcg-filen kommer också att förbehandlas med ecpg , som konverterar den till en .c-fil enligt ANSI-standarderna. Därför, i det andra steget, kan den genererade .c-filen kompileras direkt med en standard C-kompilator.
Följande kommando skapar från filen my_c_file_with_embedded_sql_commands.pcg en my_c_file_with_embedded_sql_commands.c -fil, som kan bearbetas vidare som en ren C-kod.
$ ecpg my_c_file_with_embedded_sql_commands.pcg
Det finns också källkod för ecpg tillgänglig i PostgreSQL källkod git- förvaret.
Obs: När du kompilerar den förbehandlade .c-koden, glöm inte att länka ecpg-biblioteket (libepcg), så att de genererade anropen kan hitta sina länkade metoder.
Använda värdvariabler
En viktig del när du bäddar in SQL- databaskommandon i applikationens kod är datautbytet mellan applikation och databas. För detta ändamål kan värdvariabler användas. Värdvariabler kan användas direkt från den inbäddade SQL-koden, så det finns inget behov av att generera SQL-satser med värden från C -koden manuellt som sträng vid körning.
Förutsatt att det finns en variabel som heter variabelnamn i din C-kod:
EXEC SQL INSERT INTO tabellnamn VÄRDEN (: variabelnamn );
Detta kan användas i alla uttalanden, INSERT- satsen valdes bara som ett enkelt exempel för illustration.
Ovanstående exempel visar hur man skickar en C-variabel till SQL, men data kan också skickas i motsatt riktning: tillbaka till applikationen. Följande exempel visar hur man skickar värde från SQL tillbaka till applikationens C-variabel.
EXEC SQL BEGIN DECLARE SECTION ; VARCHAR variabelnamn ; EXEC SQL END DECLARE SECTION ; EXEC SQL SELECT kolumnnamn INTO : variabelnamn FROM tabellnamn ;
För enkelhetens skull, låt oss anta att det bara finns en rad i tabellens tabellnamn . Denna sats kommer att infoga värdet för kolumnen kolumnnamn i variabelvariabeln . Varje kommando som stöder INTO- satsen kan användas på detta sätt, till exempel kommandot FETCH .
Felhantering
För bättre felhantering tillhandahåller ECPG även struktur som kallas SQL-kommunikationsområde (sqlca) . Denna struktur kommer att fyllas i efter varje körning av sql-satsen (varje tråd har sin egen sqlca) och innehåller varnings- och felinformation, t.ex. returkoden. Data i sqlca kommer att fyllas i enlighet med databassvaret och kan användas för felsökningsändamål.
Andra gränssnitt
Eftersom ECPG stöder inbäddning av SQL i programmeringsspråket C , stöder det också indirekt inbäddning i programmeringsspråket C++ . SQL - delarna översätts till C-biblioteksanrop. Dessa genereras inuti en extern "C" -klausul, som ger koppling mellan moduler skrivna på olika programmeringsspråk. Att använda ECPG med C++-koden har vissa begränsningar, eftersom ECPG-förprocessorn inte förstår den specifika syntaxen och de reserverade orden i programmeringsspråket C++. Användning av sådan syntax och ord kan leda till oväntat beteende hos applikationen. Det rekommenderas att separera de inbäddade SQL-kommandona i en länkad C-modul, som kommer att länkas och anropas från C++-applikationen.
Förutom den interna ECPG, finns det också olika externa gränssnitt för C++, Java , Lua , .NET , Node.js , Python , PHP och andra tillgängliga för PostgreSQL- databasen, som kan läggas till för att utöka de inbäddade SQL-alternativen. Det finns även andra databaser som stöder inbäddad SQL, även på andra språk än C som Java, .NET, Fortran , COBOL , PL/I .
- ^ "PostgreSQL-hemsida" . PostgreSQL . PostgreSQL Global Development Group . Hämtad 2015-06-06 .
-
^
Ahmed, Ibrar, Fayyaz, Asif och Shahzad, Amjad (27 februari 2015). Utvecklarguide för PostgreSQL . Packt Publishing Ltd, 2015. sid. 197. ISBN 978-1783989034 . Hämtad 6 juni 2015 .
{{ citera bok }}
: CS1 underhåll: flera namn: lista över författare ( länk ) - ^ "SQLCA" . PostgreSQL . PostgreSQL Global Development Group . Hämtad 2018-01-23 .
- ^ "CPP-koppling" . CPP-referens . CPP-referens . Hämtad 2015-06-06 .
- ^ "C++-applikationer" . PostgreSQL . PostgreSQL Global Development Group . Hämtad 2018-01-23 .