bing6/FMDBDataTable

删除方法有问题

Closed this issue · 6 comments

不能正常删除

bing6 commented

根据pid删除失败的问题已解决,其他几个删除方法是好用的。
更新了DEMO,你可以试一下。

请问第一次建表插入数据出现如下错误是什么原因,如果我把APP重启又可以正常地存储了
DB Error: 1 "no such table: ZQBasePlayerModel"
2016-03-11 16:20:50.574 SporterMan[14464:268791] DB Query: INSERT INTO ZQBasePlayerModel(name,isPlaying,number) VALUES (?,?,?);
2016-03-11 16:20:50.574 SporterMan[14464:268791] 插入失败

bing6 commented

能把具体代码贴出来吗?我这里并没有你说的情况。

你好,是这样的,我用的是JKDBModel这个第三方,嘻嘻,但我觉得原理是差不多的,这是这个库的代码,就是 id value = [self valueForKey:proname];这段代码出来的值是null,能麻烦你帮我看看嘛,谢谢!

NSString *tableName = NSStringFromClass(self.class);
NSMutableString *keyString = [NSMutableString string];
NSMutableString *valueString = [NSMutableString string];
NSMutableArray *insertValues = [NSMutableArray array];
for (int i = 0; i < self.columeNames.count; i++) {
NSString *proname = [self.columeNames objectAtIndex:i];
if ([proname isEqualToString:primaryId]) {
continue;
}
[keyString appendFormat:@"%@,", proname];
[valueString appendString:@"?,"];
id value = [self valueForKey:proname];

    if (!value) {
        value = @"";
    }
    [insertValues addObject:value];
}

[keyString deleteCharactersInRange:NSMakeRange(keyString.length - 1, 1)];
[valueString deleteCharactersInRange:NSMakeRange(valueString.length - 1, 1)];

JKDBHelper *jkDB = [JKDBHelper shareInstance];
__block BOOL res = NO;
[jkDB.dbQueue inDatabase:^(FMDatabase *db) {
    NSString *sql = [NSString stringWithFormat:@"INSERT INTO %@(%@) VALUES (%@);", tableName, keyString, valueString];

    res = [db executeUpdate:sql withArgumentsInArray:insertValues];

    self.pk = res?[NSNumber numberWithLongLong:db.lastInsertRowId].intValue:0;

    NSLog(res?@"插入成功":@"插入失败");
}];


return res;

我是这样来存储的
//插入多条用户数据
dispatch_queue_t q1 = dispatch_queue_create("queue1", NULL);
dispatch_async(q1, ^{

if ([data[0] count] > 0) { // 有数据才添加
    for (int i=0; i<data.count; i++) {
        self.focusData = [[ZQFocusData alloc] init];
        self.focusData = [ZQFocusData objectWithKeyValues:data[i]];

        //保存到数据库
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
                 [self.focusData save];
        });

        }
    }
});

在 2016年3月11日,下午9:17,Bing notifications@github.com 写道:

能把具体代码贴出来吗?我这里并没有你说的情况。


Reply to this email directly or view it on GitHub #2 (comment).

bing6 commented

首先你是不应该去JKDBModel 哪里提问?
看了你的代码应该是插入在创建表之前执行了导致无法插入,去掉save的
dispatch_async方法试试

我试了下你的FMDataTable可以很好的存储,暂时解决了这个问题,关于JKDBModel我看到别人也出现了这个问题,我问JKDBModel的作者没回复我,我还去问了FMDB的开发者,人家说我的存储方法有问题,我也不知道咋办了,只能换一个方法了,感谢你!

在 2016年3月12日,上午8:14,Bing notifications@github.com 写道:

首先你是不应该去JKDBModel 哪里提问?
看了你的代码应该是插入在创建表之前执行了导致无法插入,去掉save的
dispatch_async方法试试


Reply to this email directly or view it on GitHub #2 (comment).