QSqlRecordで奇妙な問題が発生しました。これは、「0」の代わりにnullを挿入することです。問題を説明するサンプルコードは次のとおりです。
#include <QCoreApplication>
#include <QtSql>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// Filename for sqlite database
QString filename = "./test.db";
// Make sure the database doesn't already exisit
if (QFile::exists(filename)){
QFile::remove(filename);
}
// Connect to the database
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(filename);
db.open();
// Create test table
QSqlQuery query(db);
bool result;
result = query.exec("CREATE TABLE IF NOT EXISTS 'test' ('key' TEXT, 'value' INTEGER)");
db.commit();
// Insert the test value into the database
QSqlTableModel model(0, db);
// Set the table
model.setTable("test");
// Set up the data
QSqlRecord record = model.record();
record.setValue("key", "first");
record.setValue("value", 1);
result = model.insertRecord(-1, record);
model.submitAll();
record.setValue("key", "second");
record.setValue("value", 0);
result = model.insertRecord(-1, record);
model.submitAll();
record.setValue("key", "third");
record.setValue("value", 2);
result = model.insertRecord(-1, record);
model.submitAll();
// Commit changes and close database]
db.commit();
db.close();
}
クエリを実行すると、次のtest.db
ようになります。
sqlite> select * from test;
first|1
second|
third|2
2番目のエントリには値がないことに注意してください。
Qt 5.0.1を使用しており、Windows7ではMingw4.7を使用しています。