私は数日間、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他の場所でも定義されています。
私は、パラメータの順序を変更したり、新しいものを追加し、私は結合明示を維持したいかもしれないので、代わりに:NAME_LEN
と:OTHER_LEN
の%d
を含むCREATE_SQL
でsprintf()
を使用する必要はありません。
問題:私の準備は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を開くと確信しています。
あなたがタイプミスを持っています。これは間違っている可能性があります。 – zwol