Я играл с библиотекой sqlite3 для C ++ всего несколько дней, но это вызывает у меня большое разочарование.
Я хочу определить параметризованный CREATE TABLE, а затем привязать к нему параметры. Это выглядит примерно так:
const char[] CREATE_SQL =
"CRAETE TABLE t1 ("
" name VARCHAR(:NAME_LEN)"
" other VARCHAR(:OTHER_LEN)"
");";
Идея заключается в том, что в другом файле (.cpp для этого заголовочного файла) я смогу связать эти параметры с:
int index = sqlite3_bind_parameter_index(stmt, ":NAME_LEN");
sqlite3_bind_int(stmt, index, _DB_FIELD_SIZE_NAME);
где _DB_FIELD_SIZE_NAME также определено в другом месте.
Я не хочу использовать sprintf()
с CREATE_SQL
, содержащим %d
вместо :NAME_LEN
и :OTHER_LEN
, потому что я могу изменить порядок параметров или добавить новые, и я хотел бы сохранить привязка явная.
Теперь к проблеме: моя подготовка не возвращает SQLITE_OK
, но приводит к нулевому указателю для sqlite3_stmt
. Вот что у меня есть:
sqlite3_stmt *stmt;
const char *pStmt = 0;
if( SQLITE_OK != sqlite3_prepare_v2(*db, CREATE_SQL, -1, &stmt, &pStmt) )
// throws exception with the sqlite3_errmsg(*db) text
Итак, ошибка, которую я получаю, такова:
near ":NAME_LEN": syntax error
Что я делаю не так? Я уверен, что соединение с базой данных открывается ОК.