我只玩了几天的用于 C++ 的 sqlite3 库,但这让我非常沮丧。
我想定义一个参数化的 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()
with CREATE_SQL
contains%d
而不是:NAME_LEN
and :OTHER_LEN
,因为我可能会更改参数的顺序或添加新的参数,并且我想保持明确的绑定。
现在,对于问题:我的 prepare 不返回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
我究竟做错了什么?我确定数据库连接打开正常。