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 .

  1. ^ "PostgreSQL-hemsida" . PostgreSQL . PostgreSQL Global Development Group . Hämtad 2015-06-06 .
  2. ^   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 )
  3. ^ "SQLCA" . PostgreSQL . PostgreSQL Global Development Group . Hämtad 2018-01-23 .
  4. ^ "CPP-koppling" . CPP-referens . CPP-referens . Hämtad 2015-06-06 .
  5. ^ "C++-applikationer" . PostgreSQL . PostgreSQL Global Development Group . Hämtad 2018-01-23 .

externa länkar