Получать результаты из SQL-запроса, только если применить функцию к полю.Это ошибка Poco :: Data? - PullRequest
0 голосов
/ 02 июня 2019

Я использую Poco :: Data (версия 1.8.1) для запроса базы данных sqlite (версия 3.27), компилируемой с gcc версии 7.3.0 для лука omega2 (mips), работающего с openwrt 18.06.У меня странное поведение.Когда я выполняю запрос наподобие

select <real field> from ...

, я получаю исключение NotFound (запрос из командной строки, конечно, возвращает результат).Например, если я применю к нему функцию типа «avg», то получу правильный результат.Это не происходит с целочисленным полем.Имя поля "psi": я думаю, что это не зарезервированное слово.Это ошибка Poco :: Data?Я что-то не так делаю?

Используемый код:

double result;
std::string query = "select <field> from table where <condition on pk>";
session << query, into(result), now;

этот код дает NotFound.

Изменение строкового запроса на:

std::string query = "select avg(<field>) from table where <condition on pk>";

это работает.

1 Ответ

0 голосов
/ 02 июня 2019

Вероятно, ваш запрос вернет более одной строки результатов. В этом случае into(result) потерпит неудачу, если result является скалярным значением. Попробуйте добавить limit(0, 1), например:

session << query, into(result), limit(1), now;

чтобы вернуть только одну строку результата. Однако это может быть не то, что вам нужно, поскольку вы получите строку случайных результатов, которая соответствует вашему запросу. Если вы хотите все, вы можете использовать вектор для получения результата, как в:

std::vector<double> result;
session << query, into(result), now;

Существуют также другие варианты получения многострочного результата, например, переходя по всем строкам результата, выполняя оператор несколько раз или используя RecordSet. Подробности см. В образцах Binding и RecordSet .

...