好的,所以我一直在研究数据库类,并被告知要使用异常。但是,我阅读了 Apple 开发人员指南,以尽可能避免异常并改用 NSError。(https://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Conceptual/ObjectiveC/Chapters/ocExceptionHandling.html)
所以它让我思考:我是否使用了正确的方法?在这种情况下我应该使用 NSErrors 吗?
+(long)insertTrack:(Track *)track Database:(Database *)db {
@try {
sqlite3_exec(db.dataBase, "BEGIN", 0, 0, 0); //Start transaction
const char *sqlTrack = "INSERT INTO ...";
if(sqlite3_prepare_v2(db.dataBase, sqlTrack, -1, &addTrackStatement, NULL) != SQLITE_OK) {
@throw [NSException exeption....]
}
//Bind variables
sqlite3_bind_text(...);
if(SQLITE_DONE != sqlite3_step(addTrackStatement)) {
@throw [NSException exeption....]
}
else {
long insertedTrack = sqlite3_last_insert_rowid(db.dataBase);
sqlite3_exec(db.dataBase, "COMMIT", 0, 0, 0); //End transaction
return insertedTrack;
}
}
@catch(NSException *exception) {
//Log the exception and ROLLBACK!
}
@finally {
sqlite3_clear_bindings(addTrackStatement);
sqlite3_reset(addTrackStatement);
sqlite3_finalize(addTrackStatement);
}
}
所以我的问题又来了:我是否应该使用返回值来表明准备或执行 sql 语句时出现了问题?我应该像现在一样使用 NSError 还是使用 Exception ?