C++ Qt Sqlite表列似乎已消失

C++ Qt Sqlite表列似乎已消失,c++,qt,sqlite,qt4,C++,Qt,Sqlite,Qt4,创建表似乎还可以。但是id字段在哪里?我对这个代码感到困惑。I testquery.record()包含(“id”)并且它是false”:temp:“不是临时数据库的有效名称,这将在磁盘上创建一个常规数据库,该数据库在数据库连接关闭后保留 要创建不会保存到文件中的临时或内存中的sqlite数据库,需要分别传递空字符串(*)或特殊字符串“:memory:“作为数据库名称 Qt不允许将空的QString作为数据库名称,但以'\0'开头的QString应该可以工作:db.setDatabaseNam

创建表似乎还可以。但是id字段在哪里?我对这个代码感到困惑。I testquery.record()包含(“id”)并且它是false

”:temp:“
不是临时数据库的有效名称,这将在磁盘上创建一个常规数据库,该数据库在数据库连接关闭后保留

要创建不会保存到文件中的临时或内存中的sqlite数据库,需要分别传递空字符串(*)或特殊字符串
“:memory:“
作为数据库名称


Qt不允许将空的
QString
作为数据库名称,但以
'\0'
开头的
QString
应该可以工作:
db.setDatabaseName(QChar(0))

如果在运行该代码之前,名为
dew
的表不存在
id
列,则该表不会更改。你查过了吗?嗯!你猜对了!但另一件事:temp:应该支持在exec完成后删除。你在哪里读到的?Qt4的书-构建Qt应用程序的艺术[Daniel Molekentin]在exec完成之后”-我的意思是在QApplication::exec()完成之后:)
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":temp:");

if (!db.open()) {
    qDebug() << "Database open error." << db.lastError();
    return;
}

QSqlQuery query(db);
query.prepare("create table if not exists dew (id int, title varchar(255) not null)");
if (!query.exec()) {
    qDebug() << "Query exec error. " << query.lastError();
    return;
}
qDebug() << "Insert query exec OK";

if (!query.exec("insert into dew(id, title) values (1, 'hello')")) qDebug() << query.lastError();
Insert query exec OK 
QSqlError(1, "Unable to execute statement", "table dew has no column named id") 
Insertion finished.