Сохраните время P C в Sql типе времени сервера и считайте обратно в QT - PullRequest
0 голосов
/ 31 марта 2020

Я работаю над проектом QT на C ++. Я хочу сохранить время P C в SQL дБ вместе с одним полем int. Когда я выполняю команду для сохранения времени в БД, она не выдает никакой ошибки, но когда я извлекаю время из БД, она дает следующий результат для поля времени \ 025

запрос sp_columns test return's следующее:

sNo  int
timeVar time

Запрос на сохранение времени в таблице:

QTime time = QTime::currentTime();
QString timeString = time.toString("hh:mm:ss");
timeString = QString("%1").arg(timeString);

query = QString("Insert into test values(1,'%1')").arg(timeString);
qry->prepare(query);
qry->exec();

Запрос на получение времени из таблицы

query = QString("select * from test");
qry->prepare(query);
qry->exec();

    QString sNo;
    QString timeString;
    int noOfRecords;
    noOfRecords = qry->numRowsAffected();
    do{
    sNo = qry->value(0).toString();
    time = qry->value(1).toTime(); //it returns invalid here
    timeString = qry->value(1).toString(); // Here it retrurns "\025"
    }while(qry->next());

1 Ответ

0 голосов
/ 31 марта 2020

Вам следует учесть следующее:

  • Qt SQL Плагины поддерживают многие собственные типы Qt, такие как QTime, поэтому вам не следует преобразовывать его в строку.
  • Нет необходимости создать указатель QSqlQuery.
  • Не объединять для создания запроса путем объединения строк, так как он подвержен SQL Injection.

Учитывая вышеизложенное, решение:

(не тестировался)

QTime time = QTime::currentTime();

QSqlQuery qry;
qry.prepare("INSERT INTO test values(?, ?)");
qry.addBindValue(1);
qry.addBindValue(time);
qry.exec();
QSqlQuery qry("select * from test");
while (qry.next()) {
    QString sNo = qry->value(0).toString();
    QTime time = qry->value(1).toTime();
    qDebug() << sNo << time;
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...