在這裏,我怎麼做這個創建一個名爲DBManagement 類和M檔實現這些methods.also把此行中實現文件上面@implementation行
static sqlite3 * CHManagement = nil;
-(NSString *) getDBPath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *MyDatabasePath = [documentsDirectory stringByAppendingString:@"/CHManagement.sqlite"];
return MyDatabasePath;
}
-(void) checkDataBase
{
NSLog(@"CheckDatabase Called");
NSFileManager *fileManager=[NSFileManager defaultManager];
NSError *error=[[[NSError alloc]init] autorelease];
NSString *dbPath = [self getDBPath];
BOOL success=[fileManager fileExistsAtPath:dbPath];
if(!success)
{
NSString *defaultDBPath=nil;
defaultDBPath=[[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:@"CHManagement.sqlite"];
success=[fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
if(!success)
{
NSAssert1(0,@"failed to create database with message '%@'.",[error localizedDescription]);
}
}
else
{
sqlite3 *MyDatabase;
NSInteger VersionNumber=0;
sqlite3_stmt *CompiledStatement=nil;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *MyDatabasePath = [documentsDirectory stringByAppendingString:@"/CHManagement.sqlite"];
if(sqlite3_open([MyDatabasePath UTF8String],&MyDatabase) == SQLITE_OK)
{
sqlite3_prepare_v2(MyDatabase, "select appVersionNo from VersionInfo", -1, &CompiledStatement, NULL);
while(sqlite3_step(CompiledStatement) == SQLITE_ROW)
{
VersionNumber=sqlite3_column_int(CompiledStatement,0);
}
sqlite3_reset(CompiledStatement);
sqlite3_finalize(CompiledStatement);
sqlite3_close(MyDatabase);
}
if (VersionNumber!=1)
{
[self deleteDatabase];
NSString *defaultDBPath=[[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:@"CHManagement.sqlite"];
success=[fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
if(!success)
{
NSAssert1(0,@"failed to create database with message '%@'.",[error localizedDescription]);
}
}
}
}
- (void)deleteDatabase
{
NSLog(@"Delete Database Called");
NSError **error=nil;
NSFileManager *FileManager = [NSFileManager defaultManager];
NSString *databasepath = [self getDBPath];
BOOL success = [FileManager fileExistsAtPath:databasepath];
if(success) {
[FileManager removeItemAtPath:databasepath error:error];
}
}
使用這些方法,您可以輕鬆地將數據庫加載到應用程序的iphone文檔文件夾中。 抱歉格式化。而appVersionNo是表格中的字段調用versionInfo默認值爲1
感謝Alex。但是,如果它已包含在應用程序包中,我可以回寫到數據庫嗎? – Skoota 2010-01-31 07:11:07
不,但您可以將此「預初始化」基本數據庫從那裏複製到可寫入的「Documents」文件夾。好的是,這種方法還允許用戶「重置」應用程序。 – 2010-01-31 08:02:54
謝謝亞歷克斯。這是一個非常好的方法。 – Skoota 2010-01-31 08:53:29