libpq-fe,can';不要选择INT8
我用C语言编程,在那里我使用库。通过这个库,我连接到一个本地postgresql数据库 我编写了一些测试代码,用于选择/插入某些内容。但我总是有一个问题: 我只能选择(4字节Int)数值或字符串。可能是别人给的,我没有试过每一种。但是我不能选择INT8值(8字节Int) 示例:libpq-fe,can';不要选择INT8,c,postgresql,select,C,Postgresql,Select,我用C语言编程,在那里我使用库。通过这个库,我连接到一个本地postgresql数据库 我编写了一些测试代码,用于选择/插入某些内容。但我总是有一个问题: 我只能选择(4字节Int)数值或字符串。可能是别人给的,我没有试过每一种。但是我不能选择INT8值(8字节Int) 示例: "SELECT COUNT(*)::INT8 FROM tb_Test;" 这给了我一个INT8作为结果。我不知道怎样才能得到它?我试过这个: long count = ntohl(*(uint64_t*)PQgetv
"SELECT COUNT(*)::INT8 FROM tb_Test;"
这给了我一个INT8作为结果。我不知道怎样才能得到它?我试过这个:
long count = ntohl(*(uint64_t*)PQgetvalue(result, 0, 0));
计数总是0。
但是如果我执行这个包含显式类型转换的select,它会工作:
"SELECT COUNT(*)::INT4 FROM tb_Test;"
我使用以下代码获取计数:
long count = ntohl(*(uint32_t*)PQgetvalue(result, 0, 0));
有人知道有什么问题吗?如果你喜欢我贴更多的代码,请说出来。我只是发布了这个,因为我认为这是唯一相关的部分
谢谢PQgetvalue()的返回值是字符串。然后可以使用类似于
strtoll()
的方法将它们转换为整数类型。这可能与ntohl
有关,后者在long
上运行long
可能与uint64\t
相同,也可能不同。对于uint64\u t
,使用le64toh
。这会给出相同的结果。结果值始终为0。我尝试了long
而不是uint64\t
,但这也不起作用。