SQLiteでデータをアプリから追加する方法
ObjectiveCを用いてiPhoneアプリ製作の勉強をしています。
SQLiteを使って、データをアプリから追加したいのですが、その処理をするコードの記述方法が分かりません。
NSString *sql = @"CREATE TABLE IF NOT EXISTS members (year INTEGER PRIMARY KEY,month INTEGER,day INTEGER);";
NSString *insert_sql = @"INSERT INTO members (year,month,day) VALUES(?,?,?)”;
NSString *select_sql = @"SELECT year,month,day FROM members”;
特に以上3行の処理の記述方法が分からず、自分なりに考えてこのように記述し試してみましたが
storyboard上に追加したボタンを押してDataMakeメソッドを実行するときに
”EXC_BAD_ACCES”というエラーが出てしまいました。
以下にコードを晒します。
■ViewController.h
yearF,monthF,dayFをプロパティ宣言しています。
■ViewController.m
#import "ViewController.h"
#import "FMDatabase.h"
@interface ViewController ()
- (IBAction)DataMake:(id)sender;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSString *db_path = [self sqlmethod];
NSLog(@"%@",db_path);
FMDatabase *db = [FMDatabase databaseWithPath:db_path];
NSString *sql = @"CREATE TABLE IF NOT EXISTS members (year INTEGER PRIMARY KEY,month INTEGER,day INTEGER);";
[db open];
[db executeUpdate:sql];
[db close];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (NSString*) sqlmethod{
NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *dir = [paths objectAtIndex:0];
return [dir stringByAppendingPathComponent:@"dayData.db"];
}
- (IBAction)DataMake:(id)sender {
NSString *db_path = [self sqlmethod];
FMDatabase *db = [FMDatabase databaseWithPath:db_path];
NSString *insert_sql = @"INSERT INTO members (year,month,day) VALUES(?,?,?)";
_yearF = 2014;
_monthF = 3;
_dayF = 23;
[db open];
[db executeUpdate:insert_sql,@"%d",_yearF,@"%d",_monthF,@"%d",_dayF];
[db close];
[self dataopen];
}
-(void)dataopen
{
NSString *db_path = [self sqlmethod];
FMDatabase *db = [FMDatabase databaseWithPath:db_path];
NSString *select_sql = @"SELECT year,month,day FROM members";
[db open];
FMResultSet *result = [db executeQuery:select_sql];
while ([result next]) {
int result_year = [result intForColumn:@"year"];
NSLog(@"recodeyear[%d]",result_year);
}
}
@end
以下のリンクを参考にし、”SQLiteを使用するためのライブラリ「libsqlite3.0.dylib」を追加”という項目までは出来ています。
http://blog.oukasoft.com/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0/%E3%80%90iphone%E3%82%A2%E3%83%97%E3%83%AA%E3%80%91sqlite%E3%81%A7%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B%E3%80%81fmdb%E3%80%81lita/
お礼
ありがとうございます。 callback関数を2種類作ることにしましたので 結局、データベースを2個つくり 同じドキュメントに入れました。 上手く動くかどうかは分かりませんが 動かしながら検討します。