2012-04-06 20 views
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(); 

die Ausgabe alsQt Sqlite Tabellenspalte erscheint

Insert query exec OK 
QSqlError(1, "Unable to execute statement", "table dew has no column named id") 
Insertion finished. 

Tabelle Schöpfung scheint in Ordnung zu sein Shows gegangen werden. Aber wo ist id Feld? Ich bin mit diesem Code verwirrt. Ich teste query.record(). Enthält ("id"); und es ist falsch

+0

Wenn, bevor Sie diesen Code ausführen, eine Tabelle mit dem Namen ' tau' existiert _without_ einer 'id'-Spalte, diese Tabelle wird nicht geändert. Hast du überprüft? – Mat

+0

Gut! Du hast richtig geraten! Aber eine andere Sache,: temp: sollte nach dem Ende der Exekutive gelöscht werden. Aber es bleibt. – Dewsworld

+0

Wo hast du das gelesen? – Mat

Antwort

1

":temp:" kein gültiger Name für eine temporäre Datenbank ist, schafft dies eine reguläre Datenbank auf der Festplatte, die nach der Verbindung der Datenbank bleibt geschlossen.

Um eine temporäre oder eine speicherinterne SQLite-Datenbank zu erstellen, die nicht in einer Datei gespeichert wird, müssen Sie jeweils eine leere Zeichenfolge (*) oder die spezielle Zeichenfolge ":memory:" als Datenbanknamen übergeben.

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

Qt kein leeres QString als Datenbanknamen zulässt, aber ein QString mit einem '\0' sollte beginnen arbeiten: db.setDatabaseName(QChar(0));