0

私は sqlite3 を使用しており、テーブルには 25 のエントリがあります。私は実行します:

select * from mytable;

sqlite3_step を使用して各行を取得し、列を取得します。

sqlite3_column_int(stmt, 5);  

インデックス値をハードコードされた整数として使用しています。私が直面している問題は、新しいテーブル エントリが追加された場合 [ie prefixed] 、インデックスも変更する必要があることです。

これは問題ではありませんが、保守性の問題です。別の方法で達成するための最良のアプローチ/パターンはありますか? 親切にアドバイス。

4

2 に答える 2

0

ああ...

このようなもの:

enum {

 COLUMN_NAME,

 COLUMN_AGE,

 COLUMN_ID,

 COLUMN_END

};



char *arr[COLUMN_END];

for (i=0; i<COLUMN_END; i++)
    arr[i] = malloc(50);

strcpy (arr[COLUMN_NAME] = "name");

strcpy (arr[COLUMN_AGE] = "age");

SQL ステートメントの準備:

sqlite_mprintf (" insert into mytable ('%s', '%s' , '%s') values ('%s',%d,%d)", arr[COLUMN_NAME], arr[COLUMN_AGE], arr[COLUMN_ID], "whoami", 10, 2323)");

取得中:

sqlite3_stmt_text (stmt, COLUMN_NAME);

これで十分でしょうか?

于 2012-11-16T11:05:54.313 に答える
0

select *使用する代わりにselect col1, col2, col3...

このようにして、結果の列の順序と位置は、テーブルに何が起こっても同じです (これらの列がすべて存在する限り...)

于 2012-11-16T11:52:14.393 に答える