嗨 我有我使用內置的SQLite數據庫驅動程序QTS操縱一個SQLite數據庫。QT sqlite的插入到自動增量表產生兩行
我有一個小的測試應用程序,允許我跑從線編輯一個SQL查詢,它會被執行,然後將結果在相關模型的視圖更新。
我創建了使用自動增量的主鍵值表,但如果我不提供關鍵執行INSERT語句,我得到兩個行插入,每一個自動增量值。
如果我提供密鑰值,將創建只有一行。任何想法,爲什麼這是?
表是很簡單的,e.g
CREATE TABLE GroupNames ( ID integer PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, Name varchar(50))
,當我運行查詢
insert into groupnames (name) values ("testName");
我與自動增量IDS兩個新行。但是,如果我跑
insert into groupnames (id, name) values (100, "testName");
我得到一個行如預期,用正確的ID 100 值得注意的還有,如果我嘗試
insert into table groupnames (id, name) values (100, "testName");
insert into table groupnames (name) values ("testName");
查詢不運行。 Qt的代碼運行查詢簡單得不能再簡單:
QSqlQuery *DbCore::run_query(const QString &query_string)
{
QSqlDatabase db = QSqlDatabase::database(defConnectionName);
if(!db.isOpen())
return NULL;
QSqlQuery *q = new QSqlQuery(query_string, db);
q->exec();
return q;
}
我增加了一些日誌代碼檢查查詢被執行一次:
QSqlDatabase db = QSqlDatabase::database(defConnectionName);
if(!db.isOpen())
return NULL;
qDebug() << "Running query:" << query_string;
QSqlQuery *q = new QSqlQuery(query_string, db);
if(!q->exec())
qDebug() << "Error running query:" << q->lastError();
return q;
日誌證實,我只有我執行一次:
Running query: "insert into groupnames (name) values ("hello")"
如果我然後使用sqlite3的外殼(以除去約QT觀點等任何疑問)檢查數據庫:
sqlite> select * from groupnames;
1|hello
2|hello
你一定赫克託03月16日你的'run_query'不會被調用兩次?在'q-> exec()'和_log返回code_之前和之後添加一些日誌記錄。請使用日誌記錄信息更新您的文章。 – Mat 2011-03-15 09:20:09
正如我在文檔中看到的,當您按照您的方式創建QSqlQuery時,將執行查詢(如果不爲空)。 要創建QSqlQuery並執行查詢,請使用:'QSqlQuery * q = new QSqlQuery(db); Q-> EXEC(QUERY_STRING)' 要看到最後執行的查詢,使用'QSqlQuery :: lastQuery()' 而在過去的查詢,這是** **成功執行'QSqlQuery :: executedQuery()'希望這幫助。 – Hector 2011-03-16 03:44:09
就是這樣!謝謝!當我提供索引時,我只得到一行,因爲第二個查詢失敗! – mike 2011-03-16 07:26:13