如何修复:Clion中的SQL逻辑错误sqlite3?

时间:2019-07-18 13:40:08

标签: c sqlite cmake clion

我正在尝试使用以下代码将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进行编译,则可以正常工作

1 个答案:

答案 0 :(得分:0)

现在,我们已经确定通过IDE运行程序时该表不存在...

通过命令行运行程序时,当前工作目录与IDE在其中运行当前工作目录时不同。由于您使用的是数据库文件的相对路径,因此,您使用的是不同的目录一个取决于您如何运行程序。实际上,只有一个数据库具有您要使用的表。

一些解决方案:

  • 使用数据库的绝对路径。
  • 将IDE配置为使用与通过命令行运行程序时相同的工作目录。