ios中可以使用c语言来操作sqlite数据库,但不是面向对象的,函数命名也很别扭,ios提供了CoreData来操作数据库,CoreData与Hibernate类似,可以通过创建相应的对象来实现数据的增删改查
1、为以后工程添加CoreData支持。
首先添加CoreData.framework
2、添加实体模型文件 File--New---File
此处 命名为 YoungModel
3、AppDelegate.h添加如下代码
#import <UIKit/UIKit.h>
#import "CoreData/CoreData.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property(readonly,strong,nonatomic)NSManagedObjectContext* managedObjectContext;
@property(readonly,strong,nonatomic)NSManagedObjectModel* managedObjectModel;
@property(readonly,strong,nonatomic)NSPersistentStoreCoordinator* persistentStoreCoordinator;
-(void)saveContext;
-(NSURL*) applicationDocumensDirectory;
@end
4、AppDelegate.m中初始化
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
@synthesize managedObjectContext=_managedObjectContext;
@synthesize managedObjectModel=_managedObjectModel;
@synthesize persistentStoreCoordinator=_persistentStoreCoordinator;
-(void)saveContext{
NSError* error=nil;
NSManagedObjectContext* managedObjectContext=self.managedObjectContext;
if (managedObjectContext!=nil) {
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
NSLog(@"保存异常 %@ %@",error ,[error userInfo]);
abort();
}
}
}
-(NSManagedObjectContext*) managedObjectContext{
if (_managedObjectContext!=nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator* coordinator=[self persistentStoreCoordinator];
if (coordinator!=nil) {
_managedObjectContext=[[NSManagedObjectContext alloc]init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
};
return _managedObjectContext;
}
-(NSManagedObjectModel*)managedObjectModel{
if (_managedObjectModel!=nil) {
return _managedObjectModel;
}
NSURL* modelURL=[[NSBundle mainBundle] URLForResource:@"YoungModel" withExtension:@"momd"];
_managedObjectModel=[[NSManagedObjectModel alloc]initWithContentsOfURL:modelURL];
return _managedObjectModel;
}
-(NSPersistentStoreCoordinator*)persistentStoreCoordinator{
if (_persistentStoreCoordinator!=nil) {
return _persistentStoreCoordinator;
}
NSURL* storeURL=[[self applicationDocumensDirectory]URLByAppendingPathComponent:@"Books.sqlite"];
NSError* error=nil;
_persistentStoreCoordinator=[[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"设置持久化存储失败 %@ %@",error, [error userInfo]);
abort();
}
return _persistentStoreCoordinator;
}
-(NSURL*)applicationDocumensDirectory{
return [[[NSFileManager defaultManager]URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]lastObject];
}
- (void)applicationWillTerminate:(UIApplication *)application {
[self saveContext];
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
5、设计实体模型
在弹出的窗口中一路默认点下去
在 AppDelegate.m中添加如下代码用于测试
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[self save:@"aaaa":[NSDate date]];
[self save:@"bbb":[NSDate date]];
[self save:@"c":[NSDate date]];
[self save:@"dddddd":[NSDate date]];
[self save:@"小李":[NSDate date]];
[self get];
//
return YES;
}
输出如下
2015-10-12 19:40:41.368 coredata2[3541:212036] 准备保存。。。。。
2015-10-12 19:40:41.450 coredata2[3541:212036] 保存完成 (null)
2015-10-12 19:40:43.385 coredata2[3541:212036] 准备保存。。。。。
2015-10-12 19:40:43.388 coredata2[3541:212036] 保存完成 (null)
2015-10-12 19:40:44.437 coredata2[3541:212036] 准备保存。。。。。
2015-10-12 19:40:44.443 coredata2[3541:212036] 保存完成 (null)
2015-10-12 19:40:45.083 coredata2[3541:212036] 准备保存。。。。。
2015-10-12 19:40:45.089 coredata2[3541:212036] 保存完成 (null)
2015-10-12 19:40:45.717 coredata2[3541:212036] 准备保存。。。。。
2015-10-12 19:40:45.724 coredata2[3541:212036] 保存完成 (null)
2015-10-12 19:40:45.727 coredata2[3541:212036] 获取到数据!!!!(
"<MyEntity: 0x7b7616c0> (entity: MyEntity; id: 0x7b75c550 <x-coredata://C5B2ADD0-02CE-47E5-AF33-83CEB35A91CA/MyEntity/p1> ; data: {\n happenData = \"2015-10-12 11:40:25 +0000\";\n name = aaaa;\n})",
"<MyEntity: 0x7ba1c620> (entity: MyEntity; id: 0x7ba1e120 <x-coredata://C5B2ADD0-02CE-47E5-AF33-83CEB35A91CA/MyEntity/p2> ; data: {\n happenData = \"2015-10-12 11:40:41 +0000\";\n name = bbb;\n})",
"<MyEntity: 0x7b838210> (entity: MyEntity; id: 0x7b892db0 <x-coredata://C5B2ADD0-02CE-47E5-AF33-83CEB35A91CA/MyEntity/p3> ; data: {\n happenData = \"2015-10-12 11:40:43 +0000\";\n name = c;\n})",
"<MyEntity: 0x7b763830> (entity: MyEntity; id: 0x7b7643c0 <x-coredata://C5B2ADD0-02CE-47E5-AF33-83CEB35A91CA/MyEntity/p4> ; data: {\n happenData = \"2015-10-12 11:40:44 +0000\";\n name = dddddd;\n})",
"<MyEntity: 0x7b89af60> (entity: MyEntity; id: 0x7b892dc0 <x-coredata://C5B2ADD0-02CE-47E5-AF33-83CEB35A91CA/MyEntity/p5> ; data: {\n happenData = \"2015-10-12 11:40:45 +0000\";\n name = \"\\U5c0f\\U674e\";\n})"
)
2015-10-12 19:40:45.750 coredata2[3541:212036] aaaa --2015-10-12 11:40:25 +0000
2015-10-12 19:40:45.750 coredata2[3541:212036] bbb --2015-10-12 11:40:41 +0000
2015-10-12 19:40:45.751 coredata2[3541:212036] c --2015-10-12 11:40:43 +0000
2015-10-12 19:40:45.751 coredata2[3541:212036] dddddd --2015-10-12 11:40:44 +0000
2015-10-12 19:40:45.751 coredata2[3541:212036] 小李 --2015-10-12 11:40:45 +0000