我正在尝试使用以下代码将sqlite3库链接到Clion中的CMakeList:
find_package(SQLite3)
target_link_libraries(IIWProject SQLite::SQLite3)
库已加载,但是当我运行代码时,Clion显示以下错误:
SQL logic error
数据库已加载,但是在调用sqlite3_prepare_v2(db, query, -1, &stmt, NULL)
时返回SQL logic error
void get_db(sqlite3 **db){
int rc;
if ((rc = sqlite3_open("db_project.db", db)) != SQLITE_OK){
//fprintf(stderr, "Failed to open DB.\n");
fprintf(stderr,"Failed to open DB: %s\n\r", sqlite3_errstr(rc));
exit(EXIT_FAILURE);
}
}
int clear_table(sqlite3 *db){
sqlite3_stmt *stmt;
int rc;
char* query = "DELETE FROM resources";
if ((rc=sqlite3_prepare_v2(db, query, -1, &stmt, NULL)) != SQLITE_OK){
fprintf(stderr,"Failed to prepare statement: %s\n\r", sqlite3_errstr(rc));
return 1;
}
if ((rc = sqlite3_step(stmt)) != SQLITE_DONE){
fprintf(stderr,"Delete failed: %s\n\r", sqlite3_errstr(rc));
return 1;
}
return 0;
}
我该如何解决?
编辑:
如果我在没有手动Clion的情况下使用gcc -lsqlite3
进行编译,则可以正常工作
答案 0 :(得分:0)
现在,我们已经确定通过IDE运行程序时该表不存在...
通过命令行运行程序时,当前工作目录与IDE在其中运行当前工作目录时不同。由于您使用的是数据库文件的相对路径,因此,您使用的是不同的目录一个取决于您如何运行程序。实际上,只有一个数据库具有您要使用的表。
一些解决方案: