gpt4 book ai didi

为 postgresql 连接 C 字符串

转载 作者:行者123 更新时间:2023-11-30 15:51:29 25 4
gpt4 key购买 nike

所以我尝试在 for 循环中构建我的 sql 语句。
但在执行时,它在字符串的第一个点显示错误。
是不是连接方法错误,因为我打印了sql语句并在postgresql中手动执行,它可以工作。

我也尝试过

char *sqlStatement = "INSERT INTO record()..VALUES();\
INSERT INTO record()..VALUES();\
INSERT INTO record()..VALUES();
"

这有效。

请注意,为了简洁起见,我已将循环减少到仅一次,并减少了列数。

代码:

char sqlStatement[8000];
for(int i=0;i<1;i++) {
sprintf(&sqlStatement[0] + strlen(sqlStatement), "INSERT INTO record (\"user_id\", \"filename\", \"ports\", \"timestamp\" ... )VALUES (1, 'example%d', 0, '123456789%d', ... );", i, i,);
}
pgResult = PQexec(pgConn, sqlStatement);
if (PQresultStatus(pgResult) != PGRES_COMMAND_OK) {
printf("%s", PQresultErrorMessage(pgResult));
PQclear(pgResult);
closeSQL(pgConn);
exit(-1);
}

错误消息:

ERROR:  syntax error at or near ""
LINE 1: INSERT INTO captures ("user_id", "filename", "ports", "time...
^

最佳答案

您正在调用 strlen(sqlStatement),但此时 sqlStatement 尚未初始化。这是未定义的行为。

放置

sqlStatement[0] = '\0';

在循环之前以空字符串开始。

顺便说一下,exit(-1) 是错误的。唯一的标准 C 退出值是 0/EXIT_SUCCESSEXIT_FAILURE。在 Unix 上,您可以使用 0255 之间的任何值。我不确定 Windows 是否如此,但可能类似。我不知道任何操作系统中 -1 有效。

关于为 postgresql 连接 C 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15080732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com