Godt C/C ++ - tilkoblingsbibliotek for PostgreSQL

Good C C Connector Library



Løsning:

libpq ++ er en veldig god kontakt for PostgreSQL

SQLAPI ++ er et C ++ - bibliotek for tilgang til flere SQL -databaser (Oracle, SQL Server, DB2, Sybase, Informix, InterBase, SQLBase, MySQL, PostgreSQL og ODBC, SQLite).



Abstract Database Connector er et C/C ++ - bibliotek for tilkobling til flere databaser (MySQL, mSQL, PostgreSQL, Interbase, Informix, BDE, ODBC). Den kjører på Linux, UNIX, BeOS og Windows, og en dynamisk driverlaster for ELF -operativsystemer er under utvikling



Navicat er et fint GUI -verktøy for PostgrSQL




Ta en titt på SOCI. Er en åpen kildekode lib under Boost Software License (en av de mest ikke-begrensende lisensene i det hele tatt).

Denne lib er designet spesielt for C ++ med tanke på generell programmering og typesikkerhet i tankene.

SOCI -nettsted




Jeg skrev en omslag rundt libpq for våre behov. Jeg var lenge Zeoslib (http://sourceforge.net/projects/zeoslib/), men de ble modnet med problemer sist jeg brukte dem, støttet ikke bufrede datasett og var ganske sakte.

libpq er veldig, veldig raskt.

Jeg laster bare ned Windows -versjonen av Postgres, kopierer alle DLL -filene til en lib -katalog og eksporterer samtalene, inkluderer .h og kobler deretter.

Jeg skjønner at dette er et veldig lavt nivå, men jeg kan ikke understreke nok ytelsesøkningen jeg innser som et resultat.

Søknaden vår er en regnskaps-/ERP -type forretningsprogram med ganske stor installasjonsbase noen med ganske betydelig samtidig mange brukerbaser (60, 100 tilkoblinger) ... Dette har tjent oss veldig godt ... Du kan svare tilbake hvis du vil ha flere detaljer om hvordan vi pakker inn libpq og håndterer bufrede oppdateringer.

OPPDATER:

Fra en forespørsel her er trinnene for å pakke inn libpq eller bruke den direkte under vinduer.

Først, til nivåinnstilling, bruker jeg Embarcadero RAD XE i disse dager, så kommandoene som følger er kommandolinjeverktøyene som leveres med RAD XE. Du må også sørge for at kommandolinjeverktøyene er i PATH -miljøvariabelen hvis ikke allerede. Hvis du bruker Visual Studio, må du beregne tilsvarende kommandoer. I utgangspunktet lager jeg en .lib -fil ut av en .DLL

TEST.C er en minimalistisk testkode jeg skrev for å være sikker på at jeg forsto hvordan jeg bruker libpq og også for å teste suksessen min.

1. Sett alle DLL -filene i en katalog og kopier inkluder -katalogen.

Du trenger ikke å installere PostgreSQL ved hjelp av MSI -builden for å få disse DLL -ene, selv om det også ville fungere. Jeg kopierte DLL -ene fra den binære versjonen. .H -filene ble også hentet fra den binære bygningen. Så katalogen min ser slik ut:

inkludere  libpq-fe.h postgres_ext.h libeay32.dll libiconv-2.dll libintl-8.dll libpq.dll ssleay32.dll zlib1.dll 2. Opprett et importbibliotek mot LIBPQ.DLL som følger: implib -c -a libpq.lib libpq.dll

skal nå ha en libpq.lib -fil i samme katalog som dine DLLer.

3. bygg testprogrammet (eller hvilket som helst program) som følger: bcc32 test.c -l libpq.lib

test. c

#include #include 'include/libpq-fe.h' char *db = 'mydatabasename'; char *dbserver = 'vertsnavn'; char *uname = 'brukernavn'; char *pass = 'passord'; char * SQL = 'velg * fra public.auditlog;'; // char *SQL = 'select userid, stationid from public.auditlog'; røye buff [200]; PGconn *dbconn; PGresult *res; void main (void) {int nFields, i, j; printf ('Forsøk på å koble til databaseserver:  n'); printf ('Database: %s  n', db); printf ('Server: %s  n', dbserver); sprintf (buff, 'dbname =%s host =%s port = 5432 user =%s password =%s', db, dbserver, uname, pass); dbconn = PQconnectdb (buff); if (PQstatus (dbconn)! = CONNECTION_OK) printf ('Tilkobling mislyktes: %s  n', PQerrorMessage (dbconn)); else {printf ('Tilkoblet vellykket!  n'); sprintf (buff, 'BEGIN; DECLARE my_portal CURSOR FOR %s', SQL); res = PQexec (dbconn, buff); if (PQresultStatus (res)! = PGRES_COMMAND_OK) {printf ('Feil ved kjøring av SQL !: %s  n', PQerrorMessage (dbconn)); PQclear (res); } annet {PQclear (res); res = PQexec (dbconn, 'HENT ALT i min_portal'); if (PQresultStatus (res)! = PGRES_TUPLES_OK) {printf ('ERROR, Hent alt mislyktes: %s', PQerrorMessage (dbconn)); PQclear (res); } annet {nFields = PQnfields (res); // Skriv ut feltnavnene for (i = 0; iFor å få tilgang til et PostgreSQL-system kopierer jeg bare libpq.lib-filen til et nytt RAD-XE-prosjekt og legger til libpq.lib i prosjektet. Jeg har pakket libpq inn i en databasetransportdriver som på en måte skiller tilgangskoden til databasen min.

Følgende skjermbilde viser et RAD-XE-prosjekt kalt ptidb, som igjen bruker libpq for å tilby PostgreSQL-støtte. Jeg støtter også SQLite bortsett fra med SQLite jeg bare kompilerer databasen direkte.

Deretter sender jeg bare DLL -ene som er oppført ovenfor, sammen med mitt siste produkt, og sørger for at DLL -er havner i samme katalog som produktet mitt.

Dette burde få deg i gang. Hvis du også er interessert i C ++ - innpakningen jeg gjør, gi meg beskjed, så legger jeg ut en ny oppdatering med noe av det.

skriv inn bildebeskrivelse her