您好 我有一个sqlite数据库,我正在使用sqlite数据库驱动程序内置的qts进行操作。
我有一个小的测试应用程序,允许我从行编辑运行一个SQL查询,它将被执行,然后在相关模型的视图中更新结果。
我创建了一个使用自动增量主键值的表,但如果我在不提供键的情况下执行insert语句,则会插入两行,每行都有一个自动增量值。
如果我提供键值,则只创建一行。任何想法为什么会这样?
表格很简单,例如
CREATE TABLE GroupNames ( ID integer PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, Name varchar(50))
当我运行查询时
insert into groupnames (name) values ("testName");
我得到两个带有自动增量ID的新行。但是,如果我跑
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 shell检查数据库(删除有关qt视图的任何疑问等):
sqlite> select * from groupnames;
1|hello
2|hello
答案 0 :(得分:0)