1

データベースにデータを挿入しようとしていますが、整数値を挿入しないようです。文字列を入力しています。アプリがクラッシュするだけです。

テキストフィールドが空の状態でデータベースに保存するボタンを押すと、メソッドはデータベースにデータを挿入しますが、値は0なので、メソッドは機能します。

私が使用する方法は次のとおりです。

-(BOOL) insertIntoDatabase: (NSInteger)day: (NSInteger)month:(NSInteger)year:(NSInteger)hours:(NSInteger)minutes:(NSInteger)salary:(NSString *)extra
{
    FMDatabase *dbHandler = [FMDatabase databaseWithPath: [Utility getDatabasePath]];
    BOOL success;
    @try {
        [dbHandler open];

        success =  [dbHandler executeUpdate:@"INSERT INTO inputs (day, month, year, hours, minutes, salary, extra) VALUES (?,?,?,?,?,?,?);",
                         day, month, year, hours, minutes, salary, extra];

        [dbHandler close];
    }
    @catch (NSException *exception) {
        NSLog(@"error..");
    }
    @finally {
        return success;
    }
}

これは、viewControllerクラスから呼び出すメソッドです。

-(IBAction)enterToDatabase:(id)sender{

    InputClassDatabaseHandler *databaseMethods = [[InputClassDatabaseHandler alloc]init];
    BOOL accept;

    NSInteger day = [_day.text integerValue];
    NSInteger month= [_month.text integerValue];
    NSInteger year= [_year.text integerValue];
    NSInteger hours= [_hours.text integerValue];
    NSInteger minutes= [_minutes.text integerValue];
    NSInteger salary= [_salary.text integerValue];

    //hardcoded for testing...
    NSString *extraWork = @"No";

    accept = [databaseMethods insertIntoDatabase:day :month :year :hours :minutes :salary :extraWork ];
}
4

1 に答える 1

1

SQLクエリに引数をオブジェクトとして渡すことを常に忘れないでください。NSIntegerはオブジェクトではないので、NSNumberオブジェクトに入れると、正常に機能します。

これはあなたのために働くはずです:

-(BOOL) insertIntoDatabase: (NSInteger)day: (NSInteger)month:(NSInteger)year:
(NSInteger)hours:(NSInteger)minutes:(NSInteger)salary:(NSString *)extra
{

 FMDatabase *dbHandler = [FMDatabase databaseWithPath: [Utility getDatabasePath]];
 BOOL success = NO;
 if(![db open])
 {
   NSLog(@"Error");
   return NO;
 }
 [dbHandler beginTransaction];
 success =  [dbHandler executeUpdate:@"INSERT INTO inputs (day, month, year, hours, minutes, salary, extra) VALUES (?,?,?,?,?,?,?);",
                     [NSNumber numberWithInt:day], [NSNumber numberWithInt:month], 
                     [NSNumber numberWithInt:year], [NSNumber numberWithInt:hours],  
                     [NSNumber numberWithInt:minutes], [NSNumber numberWithInt:salary],          
                     [NSNumber numberWithInt:extra] ];

    [dbHandler commit];
    [dbHandler close];

 return success;
}
于 2012-08-27T12:48:48.710 に答える