2009-07-16 11 views
29

के लिए अच्छा सी/सी ++ कनेक्टर लाइब्रेरी मेरा एप्लिकेशन एक वाणिज्यिक जीआईएस सी ++ एप्लीकेशन है, और मैं पोस्टग्रेस्क के लिए एक मजबूत/आसान उपयोग कनेक्टर की तलाश में हूं। (साइड नोट: मैं पोस्टजीआईएस का उपयोग करने की भी योजना बना रहा हूं)PostgreSQL

क्या आपके अनुभव के आधार पर किसी के पास कोई सिफारिश है? एक प्लस होगा यदि आपने विभिन्न लोगों की कोशिश की है।

मैं पर ध्यान दिया है:

  1. Postgres's C client
  2. pqxx
  3. QSql

संपादित इसके अलावा, किसी को पता है एक अच्छा व्यवस्थापक GUI उपकरण क्या करता है? मुझे एक समुदाय सूची here दिखाई देती है। लेकिन बहुत सारे हैं! मैं विंडोज़ पर विकास कर रहा हूं, और वाणिज्यिक उपकरणों के लिए भुगतान नहीं करना चाहता हूं। किसी अन्य स्टैक ओवरफ्लो पोस्ट में किसी ने Maestro का सुझाव दिया।

उत्तर

28

libpq++ एक PostgreSQL

SQLAPI++ के लिए बहुत अच्छा कनेक्टर प्रदान करना है एक सी कई SQL डेटाबेस (Oracle, SQL सर्वर, DB2, Sybase, इन्फोर्मिक्स, InterBase, SQLBase, MySQL, PostgreSQL और ODBC तक पहुँचने के लिए ++ पुस्तकालय, SQLite है)।

Abstract Database Connector कई डेटाबेस (MySQL, mSQL, PostgreSQL, इंटरबेस, इनफॉर्मिक्स, बीडीई, ओडीबीसी) से कनेक्शन बनाने के लिए एक सी/सी ++ लाइब्रेरी है। यह लिनक्स, यूनिक्स, BeOS, और Windows पर चलाता है और ईएलएफ OSes के लिए एक गतिशील चालक लोडर विकास किया जा रहा है

Navicat PostgrSQL

के लिए
+1

आप जिन्हें आप सूचीबद्ध किया है के सभी के बीच एक पसंदीदा है? – sivabudh

+1

मैंने उन सभी को विभिन्न परिस्थितियों में उपयोग किया है – joe

+2

SQLAPI ++ एक शेयर-वेयर उत्पाद है जिसके लिए लाइसेंस की आवश्यकता होती है। – tadman

11

समाज पर एक नजर डालें अच्छा जीयूआई उपकरण है। बूस्ट सॉफ्टवेयर लाइसेंस के तहत एक ओपन सोर्स लिब है (सबसे गैर-प्रतिबंधक लाइसेंसों में से एक)।

यह lib विशेष रूप से सामान्य प्रोग्रामिंग और प्रकार की सुरक्षा के विचार के साथ सी ++ के लिए डिज़ाइन किया गया है।

SOCI Site

सादर,
Ovanes

6

मैं हमारी जरूरतों के लिए libpq के चारों ओर एक आवरण लिखा था। मैं लंबे समय से ज़ोसलिब (http://sourceforge.net/projects/zeoslib/) था, लेकिन आखिरकार मैंने उन समस्याओं का सामना किया जो मैंने उन्हें इस्तेमाल किया था, कैश किए गए डेटासेट और सादा धीमी गति का समर्थन नहीं किया था।

libpq बहुत तेज़ है।

मैं बस पोस्टग्रेज़ के विंडोज संस्करण को डाउनलोड करता हूं, सभी डीएलएल को एक lib निर्देशिका में कॉपी करता हूं और कॉल निर्यात करता हूं, उसके अनुसार .h और लिंक शामिल करता हूं।

मुझे एहसास है कि यह बहुत कम स्तर है, लेकिन परिणामस्वरूप मैं प्रदर्शन में काफी वृद्धि नहीं कर सकता हूं।

हमारा आवेदन एक बड़े पैमाने पर स्थापित आधार के साथ एक लेखांकन/ईआरपी प्रकार का व्यवसाय अनुप्रयोग है, जिसमें काफी महत्वपूर्ण समवर्ती कई उपयोगकर्ता आधार (60, 100 कनेक्शन) हैं ... इसने हमें बहुत अच्छी सेवा दी है ... यदि आप वापस जवाब दे सकते हैं आप libpq को लपेटने और कैश किए गए अपडेट को संभालने के तरीके के बारे में अधिक जानकारी चाहते हैं।

UPDATE: 

यहां एक अनुरोध से libpq को लपेटने या सीधे विंडोज़ के तहत इसका उपयोग करने के लिए कदम हैं।

सबसे पहले, स्तर सेट करने के लिए, मैं इन दिनों Embarcadero RAD XE का उपयोग करता हूं, इसलिए अनुसरण करने वाले आदेश कमांड लाइन टूल्स हैं जो रैड एक्सई के साथ शिप करते हैं। आपको यह सुनिश्चित करने की भी आवश्यकता है कि आपके कमांड लाइन टूल्स पाथ पर्यावरण चर में हैं यदि पहले से नहीं हैं। यदि विजुअल स्टूडियो का उपयोग करते हैं, तो आपको समकक्ष कमांड का काम करना होगा। असल में मैं एक .lib फ़ाइल बना रहा हूं। डीएलएल

टेस्ट.सी एक न्यूनतम परीक्षण कोड है जिसे मैंने यह सुनिश्चित करने के लिए लिखा है कि मुझे libpq का उपयोग करने और मेरी सफलता का परीक्षण करने के लिए भी समझ लिया गया है।

1. Put all the DLLs into a directory and copy the include directory. 

आप हालांकि वह भी काम करेगा, एमएसआई इन DLLs प्राप्त करने के लिए निर्माण का उपयोग कर PostgreSQL स्थापित करने की आवश्यकता नहीं है। मैंने द्विआधारी निर्माण से डीएलएल की प्रतिलिपि बनाई। एच। फाइलों को बाइनरी बिल्ड से भी लिया गया था। तो मेरी निर्देशिका इस तरह दिखता है:

include\ 
    libpq-fe.h 
    postgres_ext.h 
    libeay32.dll 
    libiconv-2.dll 
    libintl-8.dll 
    libpq.dll 
    ssleay32.dll 
    zlib1.dll 



2. Create an import library against LIBPQ.DLL as follows: 
    implib -c -a libpq.lib libpq.dll 

अब अपनी DLLs रूप में एक ही निर्देशिका में libpq.lib फ़ाइल होनी चाहिए।

3. build the test program (or any program) as follows: 
    bcc32 test.c -l libpq.lib 

test.c

#include <stdio.h> 
#include "include/libpq-fe.h" 


char *db  = "mydatabasename"; 
char *dbserver = "hostname"; 
char *uname = "username"; 
char *pass  = "password"; 

char *SQL  = "select * from public.auditlog;"; 
// char *SQL  = "select userid, stationid from public.auditlog"; 

char  buff[200]; 
PGconn *dbconn; 
PGresult *res; 

void main(void) 
{ 
int nFields, i, j; 

    printf("Attempting to Connect to Database Server:\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("Connection Failed: %s\n", PQerrorMessage(dbconn)); 
    else 
    { 
    printf("Connected Successfully!\n"); 

    sprintf(buff, "BEGIN; DECLARE my_portal CURSOR FOR %s", SQL); 

    res = PQexec(dbconn, buff); 
    if(PQresultStatus(res) != PGRES_COMMAND_OK) 
    { 
     printf("Error executing SQL!: %s\n", PQerrorMessage(dbconn)); 
     PQclear(res); 
    } 
    else 
    { 
     PQclear(res); 
     res = PQexec(dbconn, "FETCH ALL in my_portal"); 

     if(PQresultStatus(res) != PGRES_TUPLES_OK) 
     { 
     printf("ERROR, Fetch All Failed: %s", PQerrorMessage(dbconn)); 
     PQclear(res); 
     } 
     else 
     { 
     nFields = PQnfields(res); 

     // Print out the field names 
     for(i=0; i<nFields; i++) 
      printf("%-15s", PQfname(res, i)); 

     printf("\n"); 

     // Print out the rows 
     for(i=0; i<PQntuples(res); i++) 
     { 
      for(j=0; j<nFields; j++) 
      printf("%-15s", PQgetvalue(res, i, j)); 

      printf("\n"); 
     } 

     res = PQexec(dbconn, "END"); 
     PQclear(res); 
     } 
    } 

    } 


    PQfinish(dbconn); 
} 

अब किसी भी नए रेड-XE परियोजना में एक PostgreSQL प्रणाली मैं बस libpq.lib फ़ाइल की प्रतिलिपि पहुँच सकते हैं और परियोजना के लिए libpq.lib जोड़ने के लिए। मैंने libpq को डेटाबेस ट्रांसपोर्ट ड्राइवर में लपेट लिया है जो कि मेरे डेटाबेस एक्सेस कोड को अलग करता है।

निम्नलिखित स्क्रीन शॉट एक RAID-XE प्रोजेक्ट दिखाता है जिसे ptidb कहा जाता है, बदले में, PostgreSQL समर्थन प्रदान करने के लिए libpq का उपयोग करता है। मैं SQLite को छोड़कर SQLite का समर्थन भी करता हूं, बस डेटाबेस को सीधे संकलित करता हूं।

तब मैं बस अपने अंतिम उत्पाद के साथ डीएलएल को सूचीबद्ध करता हूं, यह सुनिश्चित करता हूं कि डीएलएल मेरे उत्पाद के समान निर्देशिका में घुमाए।

यह आपको जाना चाहिए। यदि आप सी ++ रैपिंग में भी रूचि रखते हैं, तो मुझे बताएं और मैं इसके साथ एक और अपडेट पोस्ट करूंगा।

enter image description here

+1

नए उपयोगकर्ता [आर्ट] (http://stackoverflow.com/users/3370421/art) से अनुरोध: '@Eric, क्या आप कृपया libpq को विंडोज पर ठीक से काम करने के लिए उठाए गए चरणों पर थोड़ा सा विस्तारित करेंगे। कार्य के लिए एक ट्यूटोरियल दृष्टिकोण बहुत मदद करेगा। अग्रिम में बहुत बहुत धन्यवाद:) ' –