我到目前为止......这是我的代码:
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
// create the d/b or get the connection value
SQLiteDB *dbInstance = [[SQLiteDB alloc] init];
}
现在,问题是:这段代码应该检查数据库是否存在,如果不存在,则创建它。我的问题是我有一个问题,弄清楚究竟如何编写被调用方法的第一行以及将它放在SQLiteDB.m中的位置。这是实例方法( - )还是类方法(+)?
我很遗憾对此如此蹩脚,但是一旦我看到它,我将掌握它...其余的代码是用C#编写的,我可以处理转换为Obj_C。
答案 0 :(得分:0)
我假设通过“查看数据库是否存在”,您的意思是“查看数据库文件是否存在于磁盘上”。为此,您使用类fileExistsAtPath:
的方法NSFileManager
。这是一个实例方法,但您可以使用[NSFileManager defaultIntance]
。
首先计算文件的路径(由您决定)。检查文件是否存在。如果是,请打开文件,否则,创建一个具有该文件名的新数据库。
答案 1 :(得分:0)
以下是将现有数据库从Bundle复制到Documents目录的方法,但可以轻松地适应新数据库。只需使用下面的fileExistsAtPath:
方法逻辑,并替换要对自定义数据库创建代码执行的操作。
将它放在AppDelegate.m文件中:
- (void)prepareDatabase
{
//add Database Versioning check to see if the resources database is newer
// generally as simple as naming your database with a version on the end
NSFileManager *filemanager = [NSFileManager defaultManager];
NSString *databasePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingString:@"/YOURDATABASE.s3db"];
if(![filemanager fileExistsAtPath:databasePath]) {
//Database doesn't exist yet, so we copy it from our resources
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/YOURDATABASE.s3db"];
if([filemanager copyItemAtPath:defaultDBPath toPath:databasePath error:nil]) {
NSLog(@"Database Copied from resources");
} else {
NSLog(@"Database copy FAILED from %@ to %@",defaultDBPath,databasePath);
}
}
}
然后在您的applicationDidFinishLaunching:
方法中调用:
[self prepareDatabase];