FMDB 数据库和 xcode 插入数据库

Posted

技术标签:

【中文标题】FMDB 数据库和 xcode 插入数据库【英文标题】:FMDB database and xcode inserting into database 【发布时间】:2012-08-24 14:03:46 【问题描述】:

我正在尝试将数据插入数据库,但似乎它不会插入整数值,它正在输入字符串。应用程序崩溃了。

如果我按下将其保存到数据库中的按钮,文本字段为空,这些方法确实会将数据插入数据库,但值为 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 ];

【问题讨论】:

应用程序崩溃 - 哪个错误?顺便说一句,你的代码“int accept = 1; if (accept ==1) return success; ”看起来很奇怪...... 没有错误,只是输入整数时崩溃。 int 接受的东西只是我为测试所做的......我已经删除了它。 我也试过这样:accept = [databaseMethods insertIntoDatabase:25 :8 :2012 :7 :15 :110 :extraWork ];这也不起作用 您使用哪种类型创建数据库字段? 【参考方案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;

【讨论】:

感谢我几天前解决了我的问题,但这也有效 您之前遇到的问题是什么? 我将方法更改为 updateWithFormat ,然后可以通过 %d 和 NSInteger 传递,正如我在上面所写的那样:) 但是我不应该尝试并抓住 insertIntoDatabase 方法吗?我会按照你的方式进行,因为它看起来更专业。 我编写代码的方式是处理数据库的错误。如果您想更加谨慎,请检查success 变量中返回的值,然后“提交”。很高兴能帮上忙:)

以上是关于FMDB 数据库和 xcode 插入数据库的主要内容,如果未能解决你的问题,请参考以下文章

带有 FMDB 包装器的 Sqlite 数据库不插入数据

FMDB:添加新列并插入数据

使用 FMDB 插入表失败

FMDB批量插入数据

使用 isTransaction 在 FMDB 数据库中插入三千个字符串数据

将数据插入 SQLite(使用 FMDB)在设备上不起作用?