Qt и SQLite не могут обрабатывать значения NULL или я что-то не так делаю? - PullRequest
4 голосов
/ 02 августа 2010

Если я создаю таблицу с использованием Qt и SQLite, которая имеет пустые столбцы (столбцы без «NOT NULL»), и добавлю в нее нулевое значение (используя NULL QVariant), получая такое значение обратно, будет возвращено не и NULL QVariant, но QVariant типа String и значения "". Я делаю что-то не так или Qt с SQLite не может различить значение NULL в базе данных и значение по умолчанию (0, "", дата по умолчанию и т. Д.)? Мой тестовый код:

#include <QtCore/QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QVariant>
#include <QSqlRecord>

int main(int argc, char *argv[])
{
  QCoreApplication a(argc, argv);
  QSqlDatabase db = QSqlDatabase::addDatabase( "QSQLITE" );
  db.setHostName( "MyHost" );
  db.setDatabaseName( "c:\\tmp\\db.sql" );
  db.open();

  QSqlQuery( "CREATE TABLE a ( b INT )", db );
  QSqlQuery query( db );
  query.prepare( "INSERT INTO a ( b ) VALUES ( :b )" );
  //  Insert NULL value into table (NULL variant).
  query.bindValue( ":b", QVariant( QVariant::Int ) );
  query.exec();
  query = QSqlQuery( "SELECT * FROM a", db );
  query.next();
  //  Get value from table - it has type string and is "".
  QVariant val = query.value( query.record().indexOf( "b" ) );
  QVariant::Type type = val.type();
  QString str = val.toString();
}

1 Ответ

4 голосов
/ 03 августа 2010

По моему опыту, если значение БД равно NULL, QVariant :: isNull () вернет true с SQLite как в Qt 4.6.2, так и в Qt 4.6.3.

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