Здравствуйте!
Есть база данных и в таблице один из столбцов имеет тип JSON. По не понятным причинам, моя программа, собранная и запущенная на Debian 9 вылетает, если делаю запрос, в котором есть это поле. К примеру:
QSqlQuery query;
query.prepare("SELECT Location, looking FROM Users WHERE");
query.exec();
Location имеет тип JSON; Абсолютно та же ошибка, если выбираю всё(SELECT *). Ошибка вот такая:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted
При этом там же прога, собранная и запущенная на винде работает отлично. И если я делаю UPDATE этого поля, то даже на дебиане работает. Ну и так же нормально работает если я изменяю тип с JSON на TEXT.
Помогите, плиз))
Алексей1153
21.6.2018, 7:33
MishaUA, "WHERE" - убери
упс, осталось от целой части кода. Реально там "SELECT Location, looking FROM Users", с которым, соответственно, вылетает.
Алексей1153
21.6.2018, 7:49
MishaUA, при создании объекта
QSqlQuery query
укажи в конструкторе ссылку на БД, иначе будет использоваться подключение по умолчанию. А какое оно там у тебя - может, в этом проблема
----------
А также попробуй, как это всё будет работать, если тип сменить на строковый
Так подключение по умолчанию и используется. В проге ещё куча запросов, помимо этого))
Оказалось, что не смотря на то, что на винде не вылетает, если в запросе есть поле JSON, то возвращается пустой результат (0 строк), но при этом query.exec()==true.
На винде Qt последний.
Litkevich Yuriy
21.6.2018, 10:26
А что за СУБД? и какой драйвер Qt используется?
MySQL (хостинг ukraine.com.ua). Но но хостинг и базу грешить нельзя, ибо с phpMyAdmin запросы, в которых есть json, работают отлично.
Драйвер (libmysql.dll) взят с офф сайта.
В общем, погонял я на убунте, установив бд прямо на неё (использовал локально) и собрав в последнем qt. Глюк остался. Получается, баги самого Qt.
я не спец в Qt, но посмотри выхлоп со strace или gdb. скорее всего, не стоит какая-нибудь библиотека, нужная для работы с json.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.