- ベストアンサー
SQLiteでデータをアプリから追加する方法
- ObjectiveCを用いてiPhoneアプリ製作の勉強をしています。SQLiteを使って、データをアプリから追加したいのですが、その処理のコード記述方法が分かりません。
- 特に以下の3行の処理の記述方法が分からず、自分なりに考えて試してみましたが、エラーが出てしまいました。「year, month, day」列を持つ「members」テーブルを作成するコードを実行すると、「EXC_BAD_ACCESS」というエラーが発生します。
- 指定したデータベースに接続し、必要なテーブルを作成するコードを実行すると、「year, month, day」の値を指定して「members」テーブルにデータを追加し、追加されたデータを表示するコードを実行します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ちょっと気がついたので追伸します。 > NSString *sql = @"CREATE TABLE IF NOT EXISTS members (year INTEGER PRIMARY KEY,month INTEGER,day INTEGER);"; の「PRIMARY KEY」は削除して @"CREATE TABLE IF NOT EXISTS members (year INTEGER ,month INTEGER,day INTEGER);" とする必要があると思います。 「PRIMARY KEY」が指定されたフィールドは、重複した値を持つことができません。 これでは同じ年の日付を複数登録できません。 年月日の組み合わせで検索することが多いなら年月日をセットでプライマリーキー指定するよう @"CREATE TABLE IF NOT EXISTS members (year INTEGER ,month INTEGER,day INTEGER ,PRIMARY KEY(year,month,day));" とした方がよいかもしれません。 (参考) http://www.dbonline.jp/sqlite/table/index6.html 上記の通りコーディング修正した後、一旦データベースを削除する必要があります。 削除処理をコーディングするのが面倒なら、一旦シミュレータまたは実機から アプリを削除して、再実行するだけでよいと思います。
その他の回答 (1)
- Lchan0211b
- ベストアンサー率61% (573/930)
FMDBは使ったことないのですが、紹介されたURLを見る限り [db executeUpdate:insert_sql,@"%d",_yearF,@"%d",_monthF,@"%d",_dayF]; が誤っていると思います。 ここは、insert_sqlに記述されているINSERT INTO文の"?"になっている箇所に 設定するオブジェクトを指定するのだと思います。 例を見る限りINTEGER型には数値文字を指定するようですので [db executeUpdate:insert_sql, [NSString stringWithFomat:@"%d",_yearF], [NSString stringWithFomat:@"%d",_monthF], [NSString stringWithFomat:@"%d",_dayF] ]; という感じでいけるのではないかと思います。 もしかしたら [db executeUpdate:insert_sql,@(_yearF),@(_monthF),@(_dayF)]; だけでもいけるかもしれません。 3行のSQL文は、おそらく問題ないと思います。 もしはずれていたら、 ”EXC_BAD_ACCES”のエラーが、DataMakeメソッド内のどの行を実行した時に 表示されるのかを補足してください。
お礼
回答ありがとうございます! 使ったことのないものに対してまで助言をいただき本当に助かります>< ご指摘のとおりコードを組み実行したところ、データベースの作成ができ、確認用のログもきちんと表示することが出来ました。 カレンダーに組み込むことも出来たのでだいぶそれっぽい形になってきました^^