You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用sqlite3_prepare_v2()时返回SQLITE_ERROR 21(SQLITE_MISUSE)问题求助

调用sqlite3_prepare_v2()时返回SQLITE_ERROR 21(SQLITE_MISUSE)问题求助

我在调用sqlite3_prepare_v2()时,SQLITE3库返回了错误码21(SQLITE_MISUSE)。

我要执行的SQL语句是:

CREATE TABLE 'T_COMPANY' ('ID' INTEGER NOT NULL,'NAME' TEXT NOT NULL, PRIMARY KEY('ID' AUTOINCREMENT))

日志输出如下:

- SQLITE prepare statement error.
- Error code: 21
- Statement:
 CREATE TABLE 'T_COMPANY' ('ID' INTEGER NOT NULL,'NAME' TEXT NOT NULL, PRIMARY KEY('ID' AUTOINCREMENT))
- Address: (nil)

以下是我的代码:

static int sqlInitDatabase(sqlite3 *pDb, const char *dbfile)
{
    int rc;

    if(SQLITE_OK != (rc = sqlite3_initialize())) {
        fprintf(stderr, "- Error initializing SQLITE engine. Error code: %d\n Aborting.\n", rc);
        return rc;
    }

    if(SQLITE_OK != (rc = sqlite3_open_v2(dbfile, &pDb, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL))) {
        fprintf(stderr, "- Fail to load or create DB file %s.\n- Error code: %d\n Aborting.\n", dbfile, rc);
        return rc;
    }

    return rc;
}

static void sqlCloseDatabase(sqlite3 *pDb)
{
    if(pDb != NULL) {
        sqlite3_close(pDb);
        sqlite3_shutdown();
    }
}

int sqlDeployDatabase(char *name)
{
    sqlite3 *pDb;
    sqlite3_stmt *stmt;
    char *query;
    int rc;
    
    if(name == NULL || strcmp(name, "") == 0) {
        fprintf(stderr, "- Database name cannot be empty.\n- Aborting\n");
        return -1;
    }

    if(SQLITE_OK != (rc = sqlInitDatabase(pDb, name))) {
        return rc;
    }

    for(int i = 0; i <= NUM_TABLES; i++) {
        if(!(query = (char *)malloc(sizeof(char) * SQL_STMT_BUF))) {
            sqlCloseDatabase(pDb);
            fprintf(stderr, "Unable to allocate memory for building the query. Aborting.\n");
            return -1;
        }

        memset(query, 0, SQL_STMT_BUF);

        buildCreateStmt(tables, i, query, 0);
        
        rc = sqlite3_prepare_v2(pDb, query, -1, &stmt, NULL);
        if (rc != SQLITE_OK) {
            fprintf(stderr, "- SQLITE prepare statement error.\n- Error code: %d\n- Statement:\n %s\n- Address: %p\n", rc, query, stmt);
            free(query);
            sqlCloseDatabase(pDb);
            return rc;
        }

        rc = sqlite3_step(stmt);
        if (rc != SQLITE_DONE) {
            fprintf(stderr, "- SQLITE step error.\n- Error code: %d\n- Statement:\n %\ns", rc, query);
            free(query);
            sqlite3_finalize(stmt);
            sqlCloseDatabase(pDb);
            return rc;
        }

        free(query);
        sqlite3_finalize(stmt);
    }

    sqlCloseDatabase(pDb);
}

我在网上搜索了相关内容但没找到解决办法,有没有人能给点建议?谢谢!

备注:内容来源于stack exchange,提问作者Marco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 09:49:34