如何在CPP中截断SQLite中的表?

时间:2017-03-18 20:39:21

标签: c sqlite

尝试截断表但输出是Segmentation fault(核心转储)。 以下是我的截断代码。 表名:DEPO 由于函数del_depo_data是从不同的地方调用的,并且数据库是从它被调用的地方打开的,所以没有编写代码来打开开放的数据库。

void del_depo_data()
{
    sqlite3 *db;
    char *zErrMsg = 0;
    int rc;
    char *sql;
    sqlite3_stmt *res;
    const char* data = "Callback function called";

    /* Create merged SQL statement */
    sql = "DELETE FROM TABLE DEPO";
    rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
    sqlite3_close(db);
    return;

}

2 个答案:

答案 0 :(得分:1)

<强>解决

  1. 需要在del_depo_data()中打开数据库。
  2. 在SQL Query中存在语法错误。
  3. 从DEPO删除将会在那里。

答案 1 :(得分:0)

  

由于函数del_depo_data是从不同的地方调用的,并且数据库是从它被调用的地方打开的,所以没有编写代码来打开开放的数据库。

如果您在代码中的其他位置打开了数据库,则需要以某种方式将数据库句柄(sqlite3 *)传递给此函数。就目前而言,您要声明一个局部变量sqlite3 *db,但绝不会将其初始化为任何值。这会导致SQLite崩溃。

此外,DELETE FROM TABLE tablename不是有效的SQLite语法。正确的语法只是DELETE FROM tablename