我正在开发软件,我正试图弄清楚如何使用ecpg。我已经设法使用 MSVC 2010 构建 PostgreSQL 9.0.4 并成功构建了一个测试程序以确保其正常运行。 (http://www.linuxjournal.com/content/accessing-postgresql-cc,除了针对Windows进行了修改。)
然而,我不知道如何构建,在源代码中为#include包含什么,等等。我已经找到了很多语法示例,但没有采用测试程序或步行的方式。即使是之前版本(8.4.x)的内容也会有所帮助。
答案 0 :(得分:2)
AFAIK首先需要嵌入式SQL C文件(扩展名为pgc
)。简单的例子:
int main(void)
{
EXEC SQL BEGIN DECLARE SECTION;
int ordinaryInt;
EXEC SQL END DECLARE SECTION;
EXEC SQL CONNECT TO tcp:postgresql://localhost:5432/postgres AS myconnection USER postgres USING '12345';
EXEC SQL INSERT INTO t (value) VALUES ('abcdefgj');
EXEC SQL COMMIT;
EXEC SQL DISCONNECT myconnection;
return 0;
}
doc中解释了连接字符串。之后,您需要ecpg.exe
,将上面的代码转换为众所周知的C代码:
在编译之前,您通过嵌入式SQL C运行该文件 预处理器,它将您习惯的SQL语句转换为特殊语句 函数调用。编译后,您必须链接到一个特殊的库 包含所需的功能。
例如:
"C:\Program Files (x86)\PostgreSQL\9.0\bin\ecpg.exe" -o ecpgTest.c ecpgTest.pgc
您生成的C代码如下所示:
/* Processed by ecpg (4.2.1) */
/* These include files are added by the preprocessor */
#include <ecpglib.h>
#include <ecpgerrno.h>
#include <sqlca.h>
/* End of automatic include section */
#line 1 "ecpgTest.pgc"
int main(void)
{
/* exec sql begin declare section */
#line 4 "ecpgTest.pgc"
int ordinaryInt ;
/* exec sql end declare section */
#line 5 "ecpgTest.pgc"
{ ECPGconnect(__LINE__, 0, "tcp:postgresql://localhost:5432/postgres" , "postgres" , "'12345'" , "myconnection", 0); }
#line 7 "ecpgTest.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into t ( value ) values ( 'abcdefgj' )", ECPGt_EOIT, ECPGt_EORT);}
#line 9 "ecpgTest.pgc"
{ ECPGtrans(__LINE__, NULL, "commit");}
#line 10 "ecpgTest.pgc"
{ ECPGdisconnect(__LINE__, "myconnection");}
#line 12 "ecpgTest.pgc"
return 0;
}
在其他包含目录中添加C:\Program Files (x86)\PostgreSQL\9.0\include
路径(配置属性→C / C ++)并将libecpg.lib
添加到其他依赖项(链接器→输入)中,可能需要将C:\Program Files (x86)\PostgreSQL\9.0\lib
路径添加到其他图书馆指令(链接器→常规),你准备好了(注意一些DLL位于C:\Program Files (x86)\PostgreSQL\9.0\bin
)。