今日のエラー アイフォンアプリ制作のSQLite3を使ってDB、エラー
sqlite3_step エラーで検索して得たネット検索の一部抜粋
実機確認で正常に動作しない場合の対処
「
databaseName=@”Data.db3″
NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *dbPath =
[documentsDir stringByAppendingPathComponent:databaseName];
これでどうでしょうか。
現在のフォルダは・・・/iPhone Simulator/4.1ですのでシミュレータのみになると思います。
」
www.sqlite.org column
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
NEXT次の対策
iPhoneアプリ開発、その(81) いくぜ解析SQLiteBooks!
>このブログを参考にさせてもらいました。自分のselect文が間違っている様な気がしてきました。いままで、SQLite3のDBファイルが悪い、間違いと思っていましたが、単に、勘違いをしているように思います。
一旦整理します。
正常にDBからカラム列を取得できていません。
今のところで考えられる原因は、
「DBファイルSQLite3ファイルが正しく作成できていない。」
と考えていました。
他のコードは本を参考にしているし、ほんのソースは実行できている。
では、自分で作成したテーブルを確認します。
現在のテーブルは3つのカラム列があります。
テーブル名はcd
フィールド名はそれぞれ
card_id, fore, back
そこで、セレクト文を以下のようにして、comlumnで取得しようとしました。
(1)select card_id form cd; 1つのカラム列を取得したい
(1-2)select back from cd; 1つのカラム列を取得したい
(2)select card_id,fore,back from cd; 3つのカラム列を取得したい
全部エラーとなってDBから情報を取得できていません。
<検証してみましょう。>
・具体的な指定
(1)select card_id form cd;とした場合
sqlite3_column_int(statement,0);//3つのカラム列の1番目で0
(1-2)select back from cd;とした場合
誤り? sqlite3_column_int(statement,2);//3つのカラム列の3番目で2
正 sqlite3_column_int(statement,0);//3つのカラム列の3番目で2であるが、セレクト文で指定したのは一つなので、0???
(2)select card_id,fore,back from cd;
(1-2)の例で行けば、
ここで、”back”の値を取得したいとすれば、
sqlite3_column_int(statement,2);//3つのカラム列の3番目でセレクト文でカラム列を3つ指定しているので、その指定が、0,1,2とする。
つまり、
sqlite3_column_int(sqlite3_stmt*, int iCol)の
int iColは、セレクト文の指定カラム列から取得したカラム列の順番の番号-1ということでしょうか。
なので、いままで、テーブルに設定されたカラム列の順番をint iColに指定してきました。
そのため、例えば、
(1-2)select back from cd;のように、セレクト文を指定して、これは、指定が1つしかないので、本来は”0”なのですが、テーブルに設定されたカラム列の順番から考えると3-1=2なので
sqlite3_column_int(statement,2);とするとNULLが返ってきて
セレクト文は1つなので、
sqlite3_column_int(statement,0);が正しい。
なのでしょうか?
試してみます。
解答
1.SQLite3のファイルは問題なし。
2.sqlite3_column_int(sqlite3_stmt*, int iCol)の
int iColは、Select文で指定するカラム列を基準に考える。DBのカラム列の順番ではない。
つまり、指定する番号である値をセレクト文に合わせて変更していなかったことが原因であり、勘違いしていたという思い込みでした。
3.思い込みを無くして、正しくAPI、関数を理解しましょう。
4.悩んだところにこだわるのは、1,2日間まで。それ以上は他の部分を先に進めましょう。
時間のある時にじっくりと調べればよいのです。
解決しても大局からすれば、ほんの僅かな成果しかありません。
プログラムは動いてこそ意味があります。プログラムの研究をしているのではありません。動かしたいのです。