gpt4 book ai didi

c++ - 为什么 sqlite 的删除总是成功,即使要删除的行不存在?

转载 作者:行者123 更新时间:2023-11-27 23:40:31 55 4
gpt4 key购买 nike

我创建一个表,往里面插入数据,然后删除一个不存在的行,虽然这个行不存在,但是操作成功了。当我删除实际存在的行时,它也成功并且该行实际上被删除了。为什么我尝试删除不存在的行时不会出现错误?

我在 eclipse 上使用 sqlite3 和 c++。我一直在使用在网络上找到的一些代码,以及我自己的代码。其他操作,如 SELECT 和 INSERT 工作正常。 DELETE 在行存在时起作用,甚至在行不存在时起作用。

//创建表

sql = "CREATE TABLE COMPANY("  \
"ID INT PRIMARY KEY NOT NULL," \
"NAME TEXT NOT NULL," \
"AGE INT NOT NULL," \
"ADDRESS CHAR(50)," \
"SALARY REAL );";

//插入数据

sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \   
"VALUES (1, 'Paul', 32, 'California', 20000.00 ); " \
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
"VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); " \
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
"VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );" \
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
"VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );";

//删除(这是删除应该失败的地方,因为没有 编号 30)

rc = sqlite3_open("test.db", &db);

if( rc ) {
cout << "ERROR ----> " << zErrMsg << endl;
return(0);
} else {
fprintf(stderr, "Opened database successfully\n");
}

/* Create SQL statement */
sql = "DELETE FROM COMPANY WHERE ID = 30";

/* Execute SQL statement */
rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);

if( rc != SQLITE_OK ) {
cout << "ERROR DELETING" << endl;
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Deletion operation done successfully\n");
}
sqlite3_close(db);

我希望显示消息“ERROR DELETING”,但是“删除操作成功完成”总是显示,即使删除的 ID 不存在也是如此。

最佳答案

为什么当我尝试删除不存在的行时不会发生错误?

数据库返回受影响的行数(在您的情况下已删除),它们不会抛出错误,除非查询有问题。

关于c++ - 为什么 sqlite 的删除总是成功,即使要删除的行不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55409865/

55 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com