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. 

テーブル作成はOKのようです。しかし、idフィールドはどこにあるのでしょうか? 私はこのコードと混同しています。query.record().contains("id");をテスト します。そしてそれは偽です

4

1 に答える 1

1

":temp:"一時データベースの有効な名前ではありません。これにより、データベース接続が閉じられた後も保持される通常のデータベースがディスク上に作成されます。

":memory:"ファイルに保存されない一時的またはメモリ内の sqlite データベースを作成するには、データベース名として空の文字列 (*) または特別な文字列をそれぞれ渡す必要があります。

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

QStringQt はデータベース名として空のものを許可しませんが、a でQString始まるものは機能する'\0'はずです:db.setDatabaseName(QChar(0));

于 2012-04-06T15:16:27.010 に答える