Если я создаю таблицу с использованием 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();
}