我只用C++的sqlite3庫玩了幾天,但它給我帶來了很大的挫折感。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()
含%d
代替:NAME_LEN
和:OTHER_LEN
CREATE_SQL
,因爲我可能會改變參數的順序或添加新的和我想保持綁定明確。
現在,對於問題:我的準備不會返回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
我在做什麼錯?我確信數據庫連接打開OK。
你有一個錯字:「CRAETE」 - >「CREATE」。這*可能是錯的。 – zwol