Qt和SQLite无法处理’NULL’值或者我做错了什么?
发布时间:2020-12-12 18:54:48 所属栏目:百科 来源:网络整理
导读:如果我使用Qt和SQLite创建一个具有可为空列的列(没有“NOT NULL”的列)并向其中添加空值(使用NULL QVariant),则返回此值将返回not和NULL QVariant,但是类型为String的QVariant和价值“”.我做错了什么或Qt与SQLite无法区分数据库中的NULL值和默认值(0,“”,
如果我使用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:tmpdb.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.(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |