Автор: Василий К. 19.2.2021, 15:00
Добрый день!
У меня есть таблица в базе 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
Василий К., а с другими типами нормально работает? Так то вроде всё нормально выглядит
Разве что динамика тут не к месту, можно на стеке работать
QSqlQuery q(db);
Автор: Василий К. 23.2.2021, 16:11
Цитата(Алексей1153 @ 20.2.2021, 19:06)
Василий К., а с другими типами нормально работает? Так то вроде всё нормально выглядит
Разве что динамика тут не к месту, можно на стеке работать
QSqlQuery q(db);
Да, с другими типами работает абсолютно корректно. Но как только в выборке появляется поле с типо json, результат - ноль строк. И никаких сообщений об ошибках. Причем, если поля json заданы значением null, то выборка работает. На счет динамики - оказывается, если не использовать указатель, происходит утечка памяти
. Давно как-то с этим столкнулся, вроде все нормально а память утекает. После долгих свистоплясок сделал открытие, а после еще где-то вычитал, что с QSqlQuery только через указатель.
Автор: Алексей1153 23.2.2021, 17:21
Цитата(Василий К. @ 23.2.2021, 18:11)
происходит утечка памяти
интересно. А можно конкретный пример, на котором это повторяется? Я не сталкивался. Может быть, глюк конкретной версии компилятора. Вообще, никакой разницы быть не должно между стеком и new/delete
Автор: Василий К. 27.2.2021, 10:29
Цитата(Алексей1153 @ 23.2.2021, 18:21)
Цитата(Василий К. @ 23.2.2021, 18:11)
происходит утечка памяти
интересно. А можно конкретный пример, на котором это повторяется? Я не сталкивался. Может быть, глюк конкретной версии компилятора. Вообще, никакой разницы быть не должно между стеком и new/delete
Воспроизвести не удалось.
Тот же код, что и 4 года назад, сейчас работает нормально. Скорее всего , что-то исправили.