Мое приложение - коммерческое приложение GIS С++, и я ищу надежный/простой в использовании коннектор для Postgresq. (Боковое примечание: я также планирую использовать PostGIS)
Есть ли у кого-нибудь рекомендации, основанные на вашем опыте? Плюс был бы, если бы вы опробовали различные.
Ответ 1
libpq ++ - один из них обеспечивает очень хороший коннектор для PostgreSQL
SQLAPI ++ - это библиотека С++ для доступа к нескольким базам данных SQL (Oracle, SQL Server, DB2, Sybase, Informix, InterBase, SQLBase, MySQL, PostgreSQL и ODBC, SQLite).
Абстрактный коннектор базы данных - это библиотека C/С++ для подключения к нескольким базам данных (MySQL, mSQL, PostgreSQL, Interbase, Informix, BDE, ODBC). Он работает в Linux, UNIX, BeOS и Windows, а динамический загрузчик драйверов для ОС ELF находится в разработке
Navicat - отличный инструмент для графического интерфейса PostgrSQL
Ответ 3
Я написал обертку вокруг libpq для наших нужд. Я долгое время был Zeoslib (http://sourceforge.net/projects/zeoslib/), но они были созваны с проблемами, которые я использовал, не поддерживали кэшированные наборы данных и простые медленно.
libpq очень, очень быстро.
Я просто загружаю версию Postgres для Windows, копирую все библиотеки DLL в каталог lib и экспортирую вызовы, соответственно .h и link.
Я понимаю, что это очень низкий уровень, но я не могу особо подчеркнуть увеличение производительности, которое я реализую в результате.
Наше приложение представляет собой бизнес-приложение учета/ERP-приложения с довольно большой базой для установки с довольно значительным одновременным множеством пользователей (60, 100 соединений)... Это послужило нам очень хорошо... Вы можете ответить, если вы хотите узнать больше о том, как мы обертываем libpq и обрабатываем кешированные обновления.
UPDATE:
Из запроса здесь приведены шаги, чтобы обернуть libpq или использовать его непосредственно под окнами.
Сначала, чтобы установить уровень, я использую Embarcadero RAD XE в эти дни, поэтому следующие команды - это инструменты командной строки, которые поставляются с RAD XE. Вы также должны убедиться, что ваши средства командной строки находятся в переменной среды PATH, если это еще не сделано. Если вы используете Visual Studio, вам придется выработать эквивалентные команды. В основном я создаю .lib файл из .LLL
TEST.C - это минималистский тестовый код, который я написал, чтобы убедиться, что я понял, как использовать libpq, а также проверить мой успех.
1. Put all the DLLs into a directory and copy the include directory.
Вам не нужно устанавливать PostgreSQL с помощью сборки MSI для получения этих DLL, хотя это тоже сработает. Я скопировал DLL из двоичной сборки. Файлы .H также были взяты из двоичной сборки. Поэтому мой каталог выглядит так:
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
должен теперь иметь файл libpq.lib в том же каталоге, что и ваши DLL.
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);
}
Теперь для доступа к системе PostgreSQL я просто копирую файл libpq.lib в любой новый проект RAD-XE и добавляю libpq.lib к проекту. Я завернул libpq в драйвер переноса базы данных, который отделяет мой код доступа к базе данных.
Следующий снимок экрана показывает проект RAD-XE под названием ptidb, который, в свою очередь, использует libpq для поддержки PostgreSQL. Я также поддерживаю SQLite, кроме SQLite. Я просто компилирую базу данных напрямую.
Затем я просто отправляю DLL, перечисленные выше, вместе с моим окончательным продуктом, удостоверяясь, что библиотеки DLL завершаются в том же каталоге, что и мой продукт.
Это должно вас заставить. Если вы также заинтересованы в обертке С++, позвольте мне знать, и я отправлю еще одно обновление с некоторыми из них.
![enter image description here]()