0
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("id"); 这是错误的

4

1 回答 1

1

":temp:"不是临时数据库的有效名称,这会在磁盘上创建一个常规数据库,该数据库在数据库连接关闭后仍然存在。

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

http://www.sqlite.org/inmemorydb.html

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

于 2012-04-06T15:16:27.010 回答