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.
表创建似乎没问题。但 id 字段在哪里?我对此代码感到困惑。我测试 query.record()。contains(&#34; id&#34;); ,它是 false
答案 0 :(得分:1)
":temp:"
不是临时数据库的有效名称,这会在磁盘上创建一个在数据库连接关闭后保留的常规数据库。
要创建不会保存到文件的临时或内存中的sqlite数据库,需要分别传递空字符串(*)或特殊字符串":memory:"
作为数据库名称。
http://www.sqlite.org/inmemorydb.html
Qt不允许空QString
作为数据库名称,但以QString
开头的'\0'
应该有效:db.setDatabaseName(QChar(0));