程序启动时需要Delegate文件将文件从沙盒取出(如果不存在),并执行相关的操作
-(void)addEditableDatabaseIfNeed
{
// 寻找 当前程序所在 沙盒下面的 Documents 文件夹
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// 取数组里面的第一个路径值
NSString *documentsPath = [paths objectAtIndex:0];
// 附加数据库文件名称
NSString *path = [documentsPath stringByAppendingPathComponent:SqliteName];
// 使用文件管理器,来判断数据库文件是否存在
NSFileManager *fm = [NSFileManager defaultManager];
bool ifFind = [fm fileExistsAtPath:path];
if(!ifFind)
{
NSLog(@"沙盒数据库文件不存在,需要复制!");
// 把 包 里面的 数据库文件 复制到 沙盒的 Documents 文件夹
NSString * srcPath = [[NSBundle mainBundle] pathForResource:@"0101.db" ofType:nil];
// 复制操作
[fm copyItemAtPath:srcPath toPath:path error:nil];
}
}
添加 didFinishLaunchingWithOptions 代理模式
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self addEditableDatabaseIfNeed];
// 创建窗口
self.window = [[[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds] autorelease];
// 创建第一个视图的 视图控制器
self.viewController = [[[RootViewController alloc] initWithNibName:@"RootView" bundle:nil] autorelease];
// 作为根视图控制器,并显示窗口
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
第二步 Finder中新建实体文件夹Model and sqlite并拖入项目
#import <Foundation/Foundation.h>
#import "NewsInfoModel.h"
// 新闻信息的 本地数据库 操作
@interface NewsInfoSqlite : NSObject
// 新增新闻
+(BOOL)addItem:(NewsInfoModel *)item;
// 编辑新闻
+(BOOL)updateItem:(NewsInfoModel *)item;
// 删除操作
+(BOOL)deleteItem:(int)newsID;
// 取单条
+(NewsInfoModel *)getItem:(int)newsID;
// 取列表
+(NSMutableArray *)getList;
@end
#import "NewsInfoSqlite.h"
#import <sqlite3.h>
#define TableName @"NewsInfo"
@implementation NewsInfoSqlite
// 新增新闻
+(BOOL)addItem:(NewsInfoModel *)item
{
if(item == nil)
return false;
BOOL result = false;
// 寻找 当前程序所在 沙盒下面的 Documents 文件夹
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// 取数组里面的第一个路径值
NSString *documentsPath = [paths objectAtIndex:0];
// 附加数据库文件名称
NSString *path = [documentsPath stringByAppendingPathComponent:SqliteName];
// 使用文件管理器,来判断数据库文件是否存在
NSFileManager *fm = [NSFileManager defaultManager];
bool ifFind = [fm fileExistsAtPath:path];
if(ifFind)
{
// 定义数据库操作对象
sqlite3 *database;
// 打开数据库
if(sqlite3_open([path UTF8String], &database) != SQLITE_OK)
{
sqlite3_close(database);
NSLog(@"打开数据库文件失败!");
}
else
{
// nil 值 处理
if(item.title == nil)
item.title = @"";
if(item.content == nil)
item.content = @"";
// 创建SQL语句
NSMutableString *sql = [NSMutableString string];
[sql appendFormat:@"insert into %@",TableName];
[sql appendFormat:@" (title,content) values ('%@','%@')",item.title,item.content];
// 执行sql语句
char *errorMsg;
if(sqlite3_exec(database, [sql UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK)
{
result = false;
NSLog(@"error to exec %@",sql);
}
else
{
result = true;
}
// 关闭数据库
sqlite3_close(database);
}
}
return result;
}
// 编辑新闻
+(BOOL)updateItem:(NewsInfoModel *)item
{
if(item == nil)
return false;
BOOL result = false;
// 寻找 当前程序所在 沙盒下面的 Documents 文件夹
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// 取数组里面的第一个路径值
NSString *documentsPath = [paths objectAtIndex:0];
// 附加数据库文件名称
NSString *path = [documentsPath stringByAppendingPathComponent:SqliteName];
// 使用文件管理器,来判断数据库文件是否存在
NSFileManager *fm = [NSFileManager defaultManager];
bool ifFind = [fm fileExistsAtPath:path];
if(ifFind)
{
// 定义数据库操作对象
sqlite3 *database;
// 打开数据库
if(sqlite3_open([path UTF8String], &database) != SQLITE_OK)
{
sqlite3_close(database);
NSLog(@"打开数据库文件失败!");
}
else
{
// nil 值 处理
if(item.title == nil)
item.title = @"";
if(item.content == nil)
item.content = @"";
// 创建SQL语句
NSMutableString *sql = [NSMutableString string];
[sql appendFormat:@"update %@ set ",TableName];
[sql appendFormat:@" title = '%@',",item.title];
[sql appendFormat:@" content = '%@'",item.content];
[sql appendFormat:@" where NewsID = %i",item.newsID];
// 执行sql语句
char *errorMsg;
if(sqlite3_exec(database, [sql UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK)
{
result = false;
NSLog(@"error to exec %@",sql);
}
else
{
result = true;
}
// 关闭数据库
sqlite3_close(database);
}
}
return result;
}
// 删除操作
+(BOOL)deleteItem:(int)newsID
{
BOOL result = false;
// 寻找 当前程序所在 沙盒下面的 Documents 文件夹
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// 取数组里面的第一个路径值
NSString *documentsPath = [paths objectAtIndex:0];
// 附加数据库文件名称
NSString *path = [documentsPath stringByAppendingPathComponent:SqliteName];
// 使用文件管理器,来判断数据库文件是否存在
NSFileManager *fm = [NSFileManager defaultManager];
bool ifFind = [fm fileExistsAtPath:path];
if(ifFind)
{
// 定义数据库操作对象
sqlite3 *database;
// 打开数据库
if(sqlite3_open([path UTF8String], &database) != SQLITE_OK)
{
sqlite3_close(database);
NSLog(@"打开数据库文件失败!");
}
else
{
// 创建SQL语句
NSMutableString *sql = [NSMutableString string];
[sql appendFormat:@"delete from %@ ",TableName];
[sql appendFormat:@" where NewsID = %i",newsID];
// 执行sql语句
char *errorMsg;
if(sqlite3_exec(database, [sql UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK)
{
result = false;
NSLog(@"error to exec %@",sql);
}
else
{
result = true;
}
// 关闭数据库
sqlite3_close(database);
}
}
return result;
}
// 取单条
+(NewsInfoModel *)getItem:(int)newsID
{
NewsInfoModel *item = nil;
// 寻找 当前程序所在 沙盒下面的 Documents 文件夹
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// 取数组里面的第一个路径值
NSString *documentsPath = [paths objectAtIndex:0];
// 附加数据库文件名称
NSString *path = [documentsPath stringByAppendingPathComponent:SqliteName];
// 使用文件管理器,来判断数据库文件是否存在
NSFileManager *fm = [NSFileManager defaultManager];
bool ifFind = [fm fileExistsAtPath:path];
if(ifFind)
{
// 定义数据库操作对象
sqlite3 *database;
// 打开数据库
if(sqlite3_open([path UTF8String], &database) != SQLITE_OK)
{
sqlite3_close(database);
NSLog(@"打开数据库文件失败!");
}
else
{
// 创建SQL语句
NSMutableString *sql = [NSMutableString string];
[sql appendFormat:@"select newsid,title,content from %@ ",TableName];
[sql appendFormat:@" where NewsID = %i",newsID];
// 执行sql语句
sqlite3_stmt *statement;
if(sqlite3_prepare(database, [sql UTF8String], -1, &statement, nil) == SQLITE_OK)
{
while (sqlite3_step(statement) == SQLITE_ROW)
{
item = [[[NewsInfoModel alloc] init] autorelease];
item.newsID = (int)sqlite3_column_int(statement, 0);
char *title = (char *)sqlite3_column_text(statement, 1);
if(title == NULL)
item.title = @"";
else
item.title = [NSString stringWithUTF8String:title];
char *content = (char *)sqlite3_column_text(statement, 2);
if(content == NULL)
item.content = @"";
else
item.content = [NSString stringWithUTF8String:content];
}
}
// 关闭数据库
sqlite3_close(database);
}
}
return item;
}
// 取列表
+(NSMutableArray *)getList
{
NSMutableArray *list = [NSMutableArray array];
// 寻找 当前程序所在 沙盒下面的 Documents 文件夹
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// 取数组里面的第一个路径值
NSString *documentsPath = [paths objectAtIndex:0];
// 附加数据库文件名称
NSString *path = [documentsPath stringByAppendingPathComponent:SqliteName];
// 使用文件管理器,来判断数据库文件是否存在
NSFileManager *fm = [NSFileManager defaultManager];
bool ifFind = [fm fileExistsAtPath:path];
if(ifFind)
{
// 定义数据库操作对象
sqlite3 *database;
// 打开数据库
if(sqlite3_open([path UTF8String], &database) != SQLITE_OK)
{
sqlite3_close(database);
NSLog(@"打开数据库文件失败!");
}
else
{
// 创建SQL语句
NSMutableString *sql = [NSMutableString string];
[sql appendFormat:@"select newsid,title,content from %@ ",TableName];
// 执行sql语句
sqlite3_stmt *statement;
if(sqlite3_prepare(database, [sql UTF8String], -1, &statement, nil) == SQLITE_OK)
{
while (sqlite3_step(statement) == SQLITE_ROW)
{
NewsInfoModel *item = [[NewsInfoModel alloc] init];
item.newsID = (int)sqlite3_column_int(statement, 0);
char *title = (char *)sqlite3_column_text(statement, 1);
if(title == NULL)
item.title = @"";
else
item.title = [NSString stringWithUTF8String:title];
char *content = (char *)sqlite3_column_text(statement, 2);
if(content == NULL)
item.content = @"";
else
item.content = [NSString stringWithUTF8String:content];
[list addObject:item];
[item release],item = nil;
}
}
// 关闭数据库
sqlite3_close(database);
}
}
return list;
}
@end
最后在ViewControler中写入相关业务逻辑方法,我引用其他项目的一个类,此时我只写了新增,其他方法类推。
- (IBAction)btnsubmit:(id)sender {
if (_cname.text.length <= 0) {
[self msg:@"用户名必须录入"];
}else{
Company *company = [[Company alloc] init];
company.cname = _cname.text;
company.cGuoshui = _cguoshui.text;
company.cDishui = _cdishui.text;
company.isXiao = _isxiaoguimo.on;
company.isGongye = _isgongye.on;
company.cPerson = _cperson.text;
company.cPhone = _cphone.text;
company.cAddress = _caddress.text;
company.beizhu = _beizhu.text;
if ([CompanySqlite addCompany:company]) {
[self msg:@"添加成功!"];
} else {
[self msg:@"addCompany添加失败!"];
}
[company release];
}
}
此时我引用的MSG方法为自定义,屏幕显示1秒
// 显示屏幕事件
-(IBAction)msg:(NSString*) mesg
{
alert = [[UIAlertView alloc] initWithTitle:mesg message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:nil, nil];
[alert setBackgroundColor:[UIColor blueColor]];
[alert setContentMode:UIViewContentModeScaleAspectFit];
[alert show];
UIActivityIndicatorView *active = [[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite] autorelease];
active.center = CGPointMake(alert.bounds.size.width/2, alert.bounds.size.height-40);
[alert addSubview:active];
[active startAnimating];
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(c) userInfo:nil repeats:NO];
}
-(void)c
{
[alert dismissWithClickedButtonIndex:0 animated:YES];
}