crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Qt, MySQL 8, JSON
Василий К.
  опции профиля:
сообщение 19.2.2021, 15:00
Сообщение #1


Новичок


Группа: Неактивирован
Сообщений: 3
Регистрация: 19.2.2021
Пользователь №: 5254

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый день!

У меня есть таблица в базе MySQL 8.0.23 следующего типа

create table s_salary_shift (f_id integer primary key auto_increment, f_formula json);
insert into s_salary_shift(f_formula, '{"fixed":5000}'


И есть вот такой запрос

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");
    db.setDatabaseName("cafe5");
    db.setUserName("root");
    db.setPassword("******");
    if (!db.open()) {
        return;
    }
    QSqlQuery *q = new QSqlQuery(db);
    q->prepare("select f_formula from s_salary_shift where f_id=:f_id");
    q->bindValue(":f_id", 1);
    q->exec();
    if (q->next()) {
        qDebug() << q->value(0);
    } else {
        qDebug() << "Empty result";
    }


так вот, из-за поля типа json всегда пустая выборка, если использоваить q->prepear(). Если же сразу сделать q->exec("select f_formula frmo s_salary_shift where f_id=1"), то выборка не пустая. Походу, это глюк Qt или я ошибаюсь?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 20.2.2021, 18:06
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Василий К., а с другими типами нормально работает? Так то вроде всё нормально выглядит

Раскрывающийся текст
Разве что динамика тут не к месту, можно на стеке работать

QSqlQuery q(db);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Василий К.
  опции профиля:
сообщение 23.2.2021, 16:11
Сообщение #3


Новичок


Группа: Неактивирован
Сообщений: 3
Регистрация: 19.2.2021
Пользователь №: 5254

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 20.2.2021, 19:06) *
Василий К., а с другими типами нормально работает? Так то вроде всё нормально выглядит

Раскрывающийся текст
Разве что динамика тут не к месту, можно на стеке работать

QSqlQuery q(db);


Да, с другими типами работает абсолютно корректно. Но как только в выборке появляется поле с типо json, результат - ноль строк. И никаких сообщений об ошибках. Причем, если поля json заданы значением null, то выборка работает. На счет динамики - оказывается, если не использовать указатель, происходит утечка памяти :rolleyes: . Давно как-то с этим столкнулся, вроде все нормально а память утекает. После долгих свистоплясок сделал открытие, а после еще где-то вычитал, что с QSqlQuery только через указатель.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 23.2.2021, 17:21
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(Василий К. @ 23.2.2021, 18:11) *
происходит утечка памяти

интересно. А можно конкретный пример, на котором это повторяется? Я не сталкивался. Может быть, глюк конкретной версии компилятора. Вообще, никакой разницы быть не должно между стеком и new/delete

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Василий К.
  опции профиля:
сообщение 27.2.2021, 10:29
Сообщение #5


Новичок


Группа: Неактивирован
Сообщений: 3
Регистрация: 19.2.2021
Пользователь №: 5254

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 23.2.2021, 18:21) *
Цитата(Василий К. @ 23.2.2021, 18:11) *
происходит утечка памяти

интересно. А можно конкретный пример, на котором это повторяется? Я не сталкивался. Может быть, глюк конкретной версии компилятора. Вообще, никакой разницы быть не должно между стеком и new/delete


Воспроизвести не удалось. :) Тот же код, что и 4 года назад, сейчас работает нормально. Скорее всего , что-то исправили.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.11.2024, 17:21