调用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
相关产品推荐
相关产品推荐

