一个database connect,既有查询又有更新(不同的statement,且不论顺序),执行完之后,不关闭,会产生一个扩展名为s3db-journal的(临时)文件,若再次使用该connect执行更新,则产生“unable to open database file”的异常。
所以,一个connect执行完之后要么close,要么自己处理临时文件。
处理方法:在每次执行完数据库操作后close连接,在新执行数据库操作前再open.
[db open];
[db beginTransaction];
NSString * insertSql = [self SQL:@"INSERT OR IGNORE INTO %@ (`userid`, `friendid`, `isrecommend`, `isfavorite`, `isonline`, `isblock`, `isfriend`, `lastlogintime`, `lastintouchtime`, `distance`) VALUES (?,?,?,?,?,?,?,?,?,?)" inTable:TABLE_NAME];
[db executeUpdate:insertSql, userid, friendid, isrecommend, isfavorite, isonline, isblock, isfriend, lastlogintime, lastintouchtime, distance];
NSInteger lastInsertId = [db lastInsertRowId];
NSString * updateSql = [self SQL:@"UPDATE %@ SET userid=?, friendid=?, isrecommend=?, isfavorite=?, isonline=?, isblock=?, isfriend=?, lastlogintime=?, lastintouchtime=?, distance=? WHERE `index`=?" inTable:TABLE_NAME];
[db executeUpdate:updateSql, userid, friendid, isrecommend, isfavorite, isonline, isblock, isfriend, lastlogintime, lastintouchtime, distance, [NSNumber numberWithInt:lastInsertId]];
[db commit];
[db close];