Qt和SQLite无法处理’NULL’值或者我做错了什么?

前端之家收集整理的这篇文章主要介绍了Qt和SQLite无法处理’NULL’值或者我做错了什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我使用Qt和sqlite创建一个具有可为空列的列(没有“NOT NULL”的列)并向其中添加空值(使用NULL QVariant),则返回此值将返回not和NULL QVariant,但是类型为String的QVariant和价值“”.我做错了什么或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();
}

解决方法

根据我的经验,如果DB值为NULL,QVariant :: isNull()将在Qt 4.6.2和Qt 4.6.3上与sqlite一起返回true.

猜你在找的Sqlite相关文章