私は 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 は別の場所でも定義されています。
パラメーターの順序を変更したり、新しいパラメーターを追加したりする可能性があり、バインドを明示的に維持したいため、andの代わりに含むsprintf()
と一緒に使用したくありません。CREATE_SQL
%d
:NAME_LEN
:OTHER_LEN
ここで、問題について説明します。私の準備は を返しませんSQLITE_OK
が、 の null ポインターになり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
私は何を間違っていますか?データベース接続が正常に開くと確信しています。