gpt4 book ai didi

c - PostgreSQL,使用 libpq 插入 float

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

我在 C 中创建了包含混合数据的插入字符串,但无法插入行。
正如我所看到的,问题可能出在 float 中,在我的语言环境中, float 使用逗号作为小数分隔符。

因此,插入时我收到错误消息:

ERROR: INSERT has more expressions than target columns
LINE 1: ...0:11:37.097203 +0100', 'Book about solving issues', '', 'PCS', 0,000000)

插入代码:

 snprintf(sqlInsert, sizeof(sqlInsert), "INSERT INTO mytable (dtbl_id, kni, dtmp, iname, tagname, mea, klc) VALUES 
(%d, '%s', '%s', '%s', '%s', '%s', %f)", o, k, dt, es, tagname, meas)), IL.klc);

如何解决这种情况以正确插入 double 字?

最佳答案

rc = snprintf(sqlInsert, sizeof sqlInsert
, "INSERT INTO mytable (dtbl_id, kni, dtmp, iname, tagname, mea, klc)"
" VALUES (%d, '%s', '%s', '%s', '%s', '%s', %f);"
, o, k, dt, es, tagname, meas, IL.klc);

更新:如果存在语言环境问题,setlocale() 可能会帮助您在程序中设置本地语言。 LC_ALL=POSIX(或 C)应始终存在。 (很可能 {%e %f %g} 格式之一对区域设置不敏感)

以下程序演示了 setlocale() 的使用:

#include <stdio.h>
#include <locale.h>

#pragma DONT define DEFAULT_LOCALE "POSIX"
#define DEFAULT_LOCALE "nl_NL.utf8"
/* LC_NUMERIC LC_ALL */

int main(int argc, char **argv)
{
double val;
char *old, *new;

val = 1024 * 1024;
val /= 10;

printf ("Original: Val=%f\n", val);
new = argv[1] ? argv[1] : DEFAULT_LOCALE ;

old = setlocale (LC_ALL, new );

printf("Old=%s, New=%s\n", old, new );
printf ("After change: Val=%f\n", val);

new = setlocale (LC_ALL, old );

printf("Old=%s, New=%s\n", new, old);
printf ("After restore: Val=%f\n", val);
return 0;
}

输出:

plasser@pisbak:./a.out
Original: Val=104857.600000
Old=nl_NL.utf8, New=nl_NL.utf8
After change: Val=104857,600000
Old=nl_NL.utf8, New=nl_NL.utf8
After restore: Val=104857,600000
plasser@pisbak:

阅读手册后,我期望 setlocale() 返回旧设置,但情况似乎并非如此。也许我无意中更改了一些全局设置:-[

更新:将参数显式转换为 *printf() 函数总是好的。

#include <locale.h>
(void) setlocale (LC_NUMERIC, "POSIX" );

rc = snprintf(sqlInsert, sizeof sqlInsert
, "INSERT INTO mytable (dtbl_id, kni, dtmp, iname, tagname, mea, klc)"
" VALUES (%d, '%s', '%s', '%s', '%s', '%s', %f);"
, (int) o, k, dt, es, tagname, meas, (double) IL.klc);

关于c - PostgreSQL,使用 libpq 插入 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9544928/

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