嗨 我有我使用内置的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