• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLiteでデータをアプリから追加する方法)

SQLiteでデータをアプリから追加する方法

このQ&Aのポイント
  • ObjectiveCを用いてiPhoneアプリ製作の勉強をしています。SQLiteを使って、データをアプリから追加したいのですが、その処理のコード記述方法が分かりません。
  • 特に以下の3行の処理の記述方法が分からず、自分なりに考えて試してみましたが、エラーが出てしまいました。「year, month, day」列を持つ「members」テーブルを作成するコードを実行すると、「EXC_BAD_ACCESS」というエラーが発生します。
  • 指定したデータベースに接続し、必要なテーブルを作成するコードを実行すると、「year, month, day」の値を指定して「members」テーブルにデータを追加し、追加されたデータを表示するコードを実行します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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 上記の通りコーディング修正した後、一旦データベースを削除する必要があります。 削除処理をコーディングするのが面倒なら、一旦シミュレータまたは実機から アプリを削除して、再実行するだけでよいと思います。

ifonesapp
質問者

お礼

回答ありがとうございます! 使ったことのないものに対してまで助言をいただき本当に助かります>< ご指摘のとおりコードを組み実行したところ、データベースの作成ができ、確認用のログもきちんと表示することが出来ました。 カレンダーに組み込むことも出来たのでだいぶそれっぽい形になってきました^^

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

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メソッド内のどの行を実行した時に 表示されるのかを補足してください。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • SQLiteのデータベースについて

    PHP初心者です。以下のSQLiteより作成するデータベースについて教えてください。 $DB = sqlite_open('db1.db'); $sql="create table tables(id integer ,name,texts)"; $result=sqlite_query($db,$SQL); 上記、プログラムにより、同ディレクトリに、db1.dbが作成されますが、このデータベース情報はどのようにして、閲覧するのでしょうか(MS-ACCESS、SQLのように簡単に閲覧できないのか)。主キーやテーブルの名前またはフィールドの名前の変更、データ一覧閲覧などどのようにするのでしょうか。 環境は、Windows環境で、PHP4を使用しております。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • iPhoneアプリプログラミングButton

    現在iPhoneアプリのプログラミングを勉強を兼ねてカレンダーを作っています。 ボタンを押した時、月を移動するプログラムを組むところで処理がうまくいかず困っています。 まず、年月日曜日を取得するとき、int型でyear,monthを宣言し,現在の日付データを入れています。 その値をボタンを押した時に増減させたいのですが、以下の//エラーが出る箇所と記載した場所でviewcontroller not found とエラーが出てしまいます。 ボタンの中のコードから、viewDidLoad内の変数の値を変えるにはどうしたらいいのでしょうか? 「//年・月・日・曜日の取得」と「//月を移動するButton」のコードはviewDidLoad内にコードを書いています。 //年・月・日・曜日の取得 NSDate *now = [NSDate date]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSUInteger flags; NSDateComponents *comps; flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; comps = [calendar components:flags fromDate:now]; NSInteger year = comps.year; NSInteger month = comps.month; NSInteger day = comps.day; comps = [calendar components:NSWeekdayCalendarUnit fromDate:now]; NSInteger weekday = comps.weekday;//1日が日曜、7日が土曜 NSInteger firstDayWeek = [self getFirstWeek:year month:month];//月の初日の曜日 //月を移動するButton UIButton *preButton = [UIButton buttonWithType:UIButtonTypeCustom]; [preButton setTitle:@"前月" forState:UIControlStateNormal]; preButton.titleLabel.font = [UIFont boldSystemFontOfSize:10]; preButton.tintColor = [UIColor whiteColor]; preButton.backgroundColor = [UIColor blueColor]; preButton.frame = CGRectMake(10, 30, 30, 20); [preButton addTarget:self action:@selector(preview:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:preButton]; //前月を表示するボタンメソッドの内容 - (void) preview:(id *)sender{ if (_year==1) { //エラーが出る箇所 self.month = 12  //エラーが出る箇所 _month--; //エラーが出る箇所 }else self.month--; //エラーが出る箇所 }

  • 2つの日付・時間の差分を求めるには

    2つの日付、時間の差分を求めるには、 timelocal を使うのかと思うのですが、 $time1 = timelocal($sec1,$min1,$hours1,$day1,$month1,$year1); $time2 = timelocal($sec2,$min2,$hours2,$day2,$month2,$year2); $result = int(($time2 - $time1)/(60*60*24)); return $result; ではいけないのでしょうか?

    • ベストアンサー
    • Perl
  • 日付書式のString型からData型への変換

    引数での日付データを加工して、変換させたいのですがエラー("String型からData型への変換は無効です。")がでます。 対処方法をアドバイスいただけないでしょうか? コードを下記に示します。 VS 2010を使用しています。 Dim From As Long Dim Year As Integer Dim Month As Integer Dim Day As Integer From = CLng(Format(DateAdd("d", 1, DateAdd("m", -1, CDate(CStr(Year) & "/" & CStr(Month) & "/" & CStr(Day)))), "yyyyMMdd"))

  • dateのDBデータ挿入について

    1つのフィールド(birthday)に $_POST['year'],$_POST['month'],$_POST['day'], をフォームからDBに送りたいのですが、 $sql=" INSERT INTO users( 'passwd', 'name', 'name_kana', 'seibetu', 'birthday', 'email', 'postal_code', 'xmpf', 'address1', 'address2' ) VALUES( '$passwd', '$name', '$name_kana', '$seibetu', '$year-$month-$day', '$email', '$postal_code', '$xmpf', '$address1', '$address2' )" では Column count doesn't match value count at row 1 がでしまいます 'birthday'はdeta型なので0000-00-00なるはずなのですが ・・・なぜでしょうか?

    • ベストアンサー
    • MySQL
  • VBAでオーバーフローが出て困っています(エクセル2000です)

    自動売買ロボット作成マニュアルという本のなかに株価をダウンロードするためのプログラムとしてソースが書かれているのですが、オーバーフローとなってしまい、実行できません。lastrow = (Range("B4").End(xlDown).Row + 1)のところでオーバーフローを起こします。この文章だけでは対処できないと思いますのでプログラムを写します。 恐れ入りますが、お助けください。 Sub Calc() Dim code As String Dim data_length As Integer, date_temp As Date Dim day_s As Integer, month_s As Integer, year_s As Integer Dim day_e As Integer, month_e As Integer, year_e As Integer Dim row_length As Integer code = input_temp(2) data_length = -100 date_temp = DateAdd("d", data_length, Now) day_e = Day(Now) month_e = Month(Now) year_e = Year(Now) day_s = Day(date_temp) month_s = Month(date_temp) year_s = Year(date_temp) Range("B4:R65000").ClearContents For i = 0 To Abs(data_length) * 0.65 Step 50 If i = 0 Then lastrow = "4" For wtbl = 19 To 25 url = "URL;http://table.yahoo.co.jp/t?s=" & code & "&a=" & month_s & "&b=" & day_s & "&c=" & year_s & "&d=" & month_e & "&e=" & day_e & "&f=" & year_e & "&g=d&q=t&y=" & i & "&z=" & code & "&x=.csv" Call Get_Data If Range("B4") = "日付" Then Exit For Else Range("B4:H54").ClearContents End If Next Else url = "URL;http://table.yahoo.co.jp/t?s=" & code & "&a=" & month_s & "&b=" & day_s & "&c=" & year_s & "&d=" & month_e & "&e=" & day_e & "&f=" & year_e & "&g=d&q=t&y=" & i & "&z=" & code & "&x=.csv" lastrow = (Range("B4").End(xlDown).Row + 1) Call Get_Data Range("B" & lastrow, "H" & lastrow).Delete row_length = (Range("B4").End(xlDown).Row) If row_length - lastrow < 49 Then Exit For End If End If Next Range("B5:H65000").Sort Key1:=Range("B5") lastrow = Range("B4").End(xlDown).Row Range("B5", "B" & lastrow).NumberFormatLocal = "yyyy/mm/dd" Range("C5", "H" & lastrow).NumberFormatLocal = "0" Range("A1").Select End Sub Sub Get_Data() With ActiveSheet.QueryTables.Add(Connection:=url, Destination:=Cells(lastrow, 2)) .Name = "Yahoo" .FieldNames = False .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = False .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = wtbl .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .Refresh BackgroundQuery:=False End With End Sub

  • プログラムの内容

    以下のプログラムは答えとして渡されたものなんですが、 コマンド引数を使ったプログラムの流れがよくわかりません。 簡単に解説してくれる方、いませんか? #include <stdio.h> int leapyear(int year){ if(year%400 == 0) return 1; else if(year%4 == 0 && year%100 != 0) return 1; else return 0; } void addmonth(int *day, int *month, int *year){ *day = 1; (*month)++; if(*month > 12) { *month = 1; (*year)++; } } int main(int argc, char *argv[]){ int year, month, day, a=0, max_days; int month_days[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; if(argc < 2) max_days = 10000; else max_days = atoi(argv[1]); printf("今日は西暦何年 何月 何日? "); scanf("%d%d%d",&year,&month,&day); while(a<max_days) { a++; day++; if(month == 2 && leapyear(year)) { if(day > 29) addmonth(&day, &month, &year); } else { if(day > month_days[month-1]) addmonth(&day, &month, &year); } } printf("今日から%d日後は、%d年%d月%d日です。",max_days, year, month, day); }

  • 日付を計算して件数を取得

    お世話になります。 よろしくお願いします。 MySQL5を使っています。 現在 year month day days の4つのフィールドがあり、それぞれに 2008 03 01 10 2008 03 02 20 というデータが入っているとします。 daysは数値です。 year,month,dayを日付に直して days-5の値を引いた日が本日と同じデータの件数を取得したいのですが SQLだけで可能でしょうか? たとえば、今日が2008-03-17だとすると 2008-03-01に(10-5)を足すと2008-03-05なので偽 2008-03-02に(20-5)を足すと2008-03-17なので真 なので1件 みたいな感じです。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 日付の範囲を月単位で取り出したい

    年月日~年月日を月単位で取り出したいのですが、 phpのリファレンスを見ても、日付に関して使えそうな関数が見当たりませんでした。 ありそうな処理なので、関数の組み合わせで、 スマートな方法はないでしょうか。 最後はどのような配列の形になってもいいのですが、 以下のように分けたいのです。 2011/8/12~2012/3/20 ↓ 2011/8/12, 2011/8/31 2011/9/1,2011,9,31 ・ ・ 2012/3/1~2012/3/20 $period (0 => array('year' =>2011, 'month' => 8, 'day' => 12), 1 => array('year' =>2012, 'month' => 3, 'day' => 20)); こんな感じで年月日が入っています。 function separeted($period){   $start = $period[0];   $end = $period[1];   $result[] = $start;   $result[] = array('year' => $start['year'], 'month' => $start['month'], 'day' => $this->getEndDay($start['month'])); この先、どのようにするかで止まっています。 全く別の方法でも、何かヒントでもいいので、アドバイスください。 getEndDay()関数は、引数の月の最後の日を返す自作関数です。 3月なら31、4月なら30を返します。

    • 締切済み
    • PHP
  • これまた初歩的なことかもしれませんが^^;

    Cです。今作成中の、カレンダーを表示させるプログラムの一部なのですが、それを以下に書きます。 ――――――――――――――― int day_of_week(int year, int month, int day) { int a, i, days1 = 0, days2 = 0, alldays, wk; a = (year - 1)/4; days1 = a * 366 + (year - 1 - a)*365 - (year - 1)/100 + (year - 1)/400; for(i=1; i< month ; i++) days2 += day_of_month(year, i); alldays = days1 + days2 + day; wk = alldays % 7; return(wk); } int write_cal(int year, int month) { /* !!! */ } ――――――――――― 関数write_calで、関数day_of_weekの戻り値wkをつかいたいのですが、!!! にそのままday_of_week(int year, int month, int day)を入れると当然コンパイルエラーになります。初歩的なことをわすれているのかもしれませんが、ポインタなどもつかっていいのでやりかた教えてください! int write_cal(int year, int month, int day) にするというのはナシでお願いします