首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL ecpg程序不会将更改保存到数据库

PostgreSQL ecpg程序不会将更改保存到数据库
EN

Stack Overflow用户
提问于 2012-09-04 22:44:15
回答 3查看 1.1K关注 0票数 4

我在我的笔记本电脑上使用postgresql服务器,并尝试通过我的C程序使用epcg连接数据库。我编写了以下命令来预编译、编译和运行我的.pgc程序。

代码语言:javascript
复制
PRE-COMPIILE - epcg sql.pgc  
COMPILE -   gcc -c sql.c -I/usr/include/postgresql   
RUN -  gcc -o sql sql.o -L/usr/lib -lecpg

我的程序正在成功编译和运行,也就是说,它没有显示任何错误。

但是,当我尝试在命令行提示符处使用命令检索数据库时,

命令- psql数据库

表中没有更新,即我在程序中编写的命令没有在数据库中更新。

以下是.pgc文件中的代码:

代码语言:javascript
复制
#include<stdio.h>


int main()
{


    EXEC SQL CONNECT TO database;

    EXEC SQL create table player(player_id int,player_name varchar(255),team varchar(10));
    EXEC SQL create table player1(player_id int,player_name varchar(255),team varchar(10));
    EXEC SQL INSERT INTO player VALUES(1,'ram','a');

    EXEC SQL COMMIT;

    EXEC SQL DISCONNECT database;

    return 0;
}  

以下是预编译后的C语言代码:

代码语言:javascript
复制
/* Processed by ecpg (4.7.0) */
/* These include files are added by the preprocessor */
#include <ecpglib.h>
#include <ecpgerrno.h>
#include <sqlca.h>
/* End of automatic include section */

#line 1 "sql.pgc"
#include<stdio.h>

int main()
{
    { ECPGconnect(__LINE__, 0, "vidisha@localhost:5432" , NULL, NULL , NULL, 0); }
#line 8 "sql.pgc"
    { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table player ( player_id int , player_name varchar ( 255 ) , team varchar ( 10 ) )", ECPGt_EOIT, ECPGt_EORT);}
#line 10 "sql.pgc"
    { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table player1 ( player_id int , player_name varchar ( 255 ) , team varchar ( 10 ) )", ECPGt_EOIT, ECPGt_EORT);}
#line 11 "sql.pgc"
    { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into player values ( 1 , 'ram' , 'a' )", ECPGt_EOIT, ECPGt_EORT);}
#line 12 "sql.pgc"
    { ECPGtrans(__LINE__, NULL, "commit");}
#line 14 "sql.pgc"
    { ECPGdisconnect(__LINE__, "vidisha");}
#line 16 "sql.pgc"
    return 0;
}
EN

回答 3

Stack Overflow用户

发布于 2012-09-04 23:52:16

使用你写的脚本,我也没有在我的测试数据库中得到任何改变。

因此,使用@vector建议,如果我给出了我的测试数据库的用户名,一切都会正常工作:

使用此makefile

代码语言:javascript
复制
default:
    ecpg sql.pgc
    gcc -c sql.c -I/usr/include/postgresql
    gcc -o sql sql.o -L/usr/lib -lecpg

作为示例,我将使用:

  • testdb作为数据库name
  • 9876作为port
  • testuser作为username
  • testpass作为口令

使用此sql.pgc

代码语言:javascript
复制
#include <stdio.h>

int main() {
    EXEC SQL CONNECT TO testdb@localhost:9876 USER 'testuser' IDENTIFIED BY 'testpass';

    EXEC SQL create table player(player_id int,player_name varchar(255),team varchar(10));
    EXEC SQL create table player1(player_id int,player_name varchar(255),team varchar(10));
    EXEC SQL INSERT INTO player VALUES(1,'ram','a');

    EXEC SQL COMMIT;

    EXEC SQL DISCONNECT;

    return 0;
}

一切都运行得很好。

票数 1
EN

Stack Overflow用户

发布于 2012-09-05 03:04:17

您还必须提供密码,默认端口为5432。这段代码对我来说很好用。testdb- databaseName, postgres - username, 123321 - password

_Also执行此程序后,您必须删除这两行create table,否则代码将无法工作(因为表已经创建好了)。你不会得到任何错误,因为你没有做过错误处理。要了解有关错误处理的详细信息,请单击_。__

代码语言:javascript
复制
#include<stdio.h>


int main()
{


    EXEC SQL CONNECT TO testdb@localhost:5432 USER 'postgres' USING '123321';

    EXEC SQL create table player(player_id int,player_name varchar(255),team varchar(10));
    EXEC SQL create table player1(player_id int,player_name varchar(255),team varchar(10));
    EXEC SQL INSERT INTO player VALUES(1,'ram','a');

    EXEC SQL COMMIT;

    EXEC SQL DISCONNECT database;

    return 0;
}
票数 1
EN

Stack Overflow用户

发布于 2017-04-14 23:45:40

您必须设置当前数据库的搜索路径。

代码语言:javascript
复制
EXEC SQL SET SEARCH_PATH TO "your database";

此外,在结束时,不要忘记提交。

代码语言:javascript
复制
EXEC SQL COMMIT;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12265954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档