小弟最近写一个C 连接 PostgreSQL 的程序.代码如下:
#include <sys/types.h>
#include <stdio.h>
#include <string.h>#include <stdlib.h>
#include <unistd.h>
#include <time.h>#include <libpq-fe.h>PGconn *conn;
PGresult *result;
//PQfinish 关闭与后端的联接.同时释放被 PGconn 对象使用的存储器.
//PQreset 重置与后端的通讯端口.
char *name = "TextDB";
char *config = "cdr_pgsql.conf";
char *pghost = NULL, *pgdbname = NULL, *pgdbusername = NULL, *pgpassword = NULL, *pgdbport = NULL, *table = NULL;
int connected = 0;static void exit_nicely(PGconn *conn)
{
PQfinish(conn);
exit(1);
}
int main()
{
char *ConnError ;
const char *conninfo;
//if(argc>1)
//conninfo = argv[1];
//else
//conninfo = "SplusDatabase";
if (connected<0)
{
conn = PQsetdbLogin(192.168.178.2,5432, NULL, NULL, conninfo,"postgres","server"); //连接数据库服务器
if (PQstatus(conn) != CONNECTION_BAD)
connected=1;
else
{
ConnError = PQerrorMessage(conn);
printf(stderr, "Connection to database failed: %s",
ConnError);
exit_nicely(conn);
}
}
if (PQstatus(conn) == CONNECTION_OK)
{
char *pgsql ;
result = PQexec(conn,"BEGIN");
if(PQresultStatus(result) != PGRES_COMMAND_OK)
{
ConnError = PQresultErrorMessage(result);
printf(stderr,"BEGIN command failed: %s",ConnError);
PQclear(result);
exit_nicely(conn);
}
else
{
PQclear(result);
pgsql = "Insert Into UserInfo(UserName,UserAge)Values(GuoPeng,21)";
result = PQexec(conn,pgsql);
if(PQresultStatus(result) != PGRES_COMMAND_OK)
{
ConnError = PQresultErrorMessage(result);
printf(stderr,"%s",ConnError);
PQclear(result);
exit_nicely(conn);
}
PQclear(result);
pgsql = "Select * From UserInfo";
result = PQexec(conn,pgsql);
int i = 0,j = 0 ;
for( i=0;i<sizeof(PQntuples((result)));i++)
{
for( j=0;j<sizeof(PQnfields(result));j++)
{
printf("%s",PQgetvalue(result,i,j));
}
}
PQclear(result);
pgsql = "Updata UserInfo Set UserName=GuoJunWei,UserAge=21";
result = PQexec(conn,pgsql);
PQclear(result);
}
}
PQfinish(conn);
connected = 0;
return 0 ;
}
编译时候出现这个错误....
[root@localhost Splus]# gcc -o cdr_pgsql1 pgsql.c
pgsql.c:20:24: too many decimal points in number
pgsql.c: In function `main':
pgsql.c:20: warning: passing arg 2 of `PQsetdbLogin' makes pointer from integer without a cast
pgsql.c:27: warning: passing arg 1 of `printf' from incompatible pointer type
请问是怎么回事呢.......
谁能个忙..谢谢..
#include <sys/types.h>
#include <stdio.h>
#include <string.h>#include <stdlib.h>
#include <unistd.h>
#include <time.h>#include <libpq-fe.h>PGconn *conn;
PGresult *result;
//PQfinish 关闭与后端的联接.同时释放被 PGconn 对象使用的存储器.
//PQreset 重置与后端的通讯端口.
char *name = "TextDB";
char *config = "cdr_pgsql.conf";
char *pghost = NULL, *pgdbname = NULL, *pgdbusername = NULL, *pgpassword = NULL, *pgdbport = NULL, *table = NULL;
int connected = 0;static void exit_nicely(PGconn *conn)
{
PQfinish(conn);
exit(1);
}
int main()
{
char *ConnError ;
const char *conninfo;
//if(argc>1)
//conninfo = argv[1];
//else
//conninfo = "SplusDatabase";
if (connected<0)
{
conn = PQsetdbLogin(192.168.178.2,5432, NULL, NULL, conninfo,"postgres","server"); //连接数据库服务器
if (PQstatus(conn) != CONNECTION_BAD)
connected=1;
else
{
ConnError = PQerrorMessage(conn);
printf(stderr, "Connection to database failed: %s",
ConnError);
exit_nicely(conn);
}
}
if (PQstatus(conn) == CONNECTION_OK)
{
char *pgsql ;
result = PQexec(conn,"BEGIN");
if(PQresultStatus(result) != PGRES_COMMAND_OK)
{
ConnError = PQresultErrorMessage(result);
printf(stderr,"BEGIN command failed: %s",ConnError);
PQclear(result);
exit_nicely(conn);
}
else
{
PQclear(result);
pgsql = "Insert Into UserInfo(UserName,UserAge)Values(GuoPeng,21)";
result = PQexec(conn,pgsql);
if(PQresultStatus(result) != PGRES_COMMAND_OK)
{
ConnError = PQresultErrorMessage(result);
printf(stderr,"%s",ConnError);
PQclear(result);
exit_nicely(conn);
}
PQclear(result);
pgsql = "Select * From UserInfo";
result = PQexec(conn,pgsql);
int i = 0,j = 0 ;
for( i=0;i<sizeof(PQntuples((result)));i++)
{
for( j=0;j<sizeof(PQnfields(result));j++)
{
printf("%s",PQgetvalue(result,i,j));
}
}
PQclear(result);
pgsql = "Updata UserInfo Set UserName=GuoJunWei,UserAge=21";
result = PQexec(conn,pgsql);
PQclear(result);
}
}
PQfinish(conn);
connected = 0;
return 0 ;
}
编译时候出现这个错误....
[root@localhost Splus]# gcc -o cdr_pgsql1 pgsql.c
pgsql.c:20:24: too many decimal points in number
pgsql.c: In function `main':
pgsql.c:20: warning: passing arg 2 of `PQsetdbLogin' makes pointer from integer without a cast
pgsql.c:27: warning: passing arg 1 of `printf' from incompatible pointer type
请问是怎么回事呢.......
谁能个忙..谢谢..
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货