#c #postgresql #select
#c #postgresql #выберите
Вопрос:
Я программирую на C, там я использую библиотеку libpq-dev / libpq-fe. С помощью этой библиотеки я подключаюсь к локальной базе данных postgresql.
Я написал некоторый тестовый код, который что-то выбирает / вставляет. Но у меня всегда была одна проблема: я могу выбирать только INT4 (4 байта Int) числовые значения или строки. Могут быть другие, я не пробовал каждый тип. Но я не могу выбрать INT8-значения (8 байт Int).
Примеры:
"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));
Кто-нибудь знает, в чем проблема? Если вам нравится, что я публикую больше кода, пожалуйста, скажите это. Я опубликовал это только потому, что считаю, что это единственная релевантная часть.
Спасибо
Комментарии:
1. Это может иметь какое-то отношение к
ntohl
, который работает наlong
.long
может совпадать или не совпадать сuint64_t
. Дляuint64_t
используйтеle64toh
.2. Это дает тот же результат. Результирующее значение всегда равно 0. Я пытался
long
вместоuint64_t
, но это тоже не сработало.
Ответ №1:
Возвращаемые значения PQgetvalue()
являются строками. Затем вы могли бы использовать что-то вроде strtoll()
для преобразования их в целочисленный тип.