我在笔记本电脑上使用postgresql服务器,并尝试使用epcg通过我的C程序连接数据库。我编写了以下命令来预编译,编译和运行我的.pgc
程序。
PRE-COMPIILE - epcg sql.pgc
COMPILE - gcc -c sql.c -I/usr/include/postgresql
RUN - gcc -o sql sql.o -L/usr/lib -lecpg
我的程序正在编译并成功运行,即它没有显示任何错误
但是,当我尝试在命令行提示符下检索我的数据库时,使用命令,
COMMAND - psql
数据库
表中没有更新,即我在程序中编写的命令没有在数据库中更新。
以下是.pgc
文件中的代码:
#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中的代码:
/* 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;
}
答案 0 :(得分:1)
使用您编写的脚本,我的测试数据库也没有任何变化。
所以,使用@vector建议,如果我给出了测试数据库的用户名,那么一切正常:
使用此makefile
:
default:
ecpg sql.pgc
gcc -c sql.c -I/usr/include/postgresql
gcc -o sql sql.o -L/usr/lib -lecpg
作为一个例子,我将使用:
testdb
作为数据库名称9876
作为端口testuser
作为用户名testpass
作为密码使用此sql.pgc
:
#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 :(得分:1)
您还必须提供密码,默认端口为5432。
这段代码对我来说很好。
testdb- databaseName, postgres - username, 123321 - password
_ 此外,在执行此程序后,您必须删除两个创建表行,否则您的代码将无法工作(因为表格已创建)。由于您没有进行错误处理,因此不会出现错误。要了解错误处理,请点击here。 _ 的
#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;
}
答案 2 :(得分:0)
您必须将搜索路径设置为当前数据库。
EXEC SQL SET SEARCH_PATH TO "your database";
此外,最后,不要忘记提交。
EXEC SQL COMMIT;