emm*_*mma 0 sqlite objective-c ios
我创建了一个使用sqlite DB的应用程序.我有一个问题,它是任何时候运行我的应用程序在我的表sqlite中添加NSDictionary.我想要一次检查sqlite,如果表sqlite中存在数据,则不添加其他添加它.
我的代码:
ViewController.h
#import <UIKit/UIKit.h>
#import "sqlite3.h"
@interface ViewController : UIViewController
{
sqlite3 * database;
}
@end
Run Code Online (Sandbox Code Playgroud)
ViewController.m
#import "ViewController.h"
#define DatabaseName @"data.sqlite"
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
NSArray *idd = [NSArray arrayWithObjects:@"122",@"234",@"453", nil];
NSArray *name = [NSArray arrayWithObjects:@"janatan",@"fred",@"john", nil];
NSArray *age = [NSArray arrayWithObjects:@"23",@"35",@"12", nil];
NSArray *sex = [NSArray arrayWithObjects:@"male",@"male",@"male", nil];
for (int i = 0; i < [idd count]; i++)
{
NSString * a = [idd objectAtIndex:i];
NSString * b = [name objectAtIndex:i];
NSString * c = [age objectAtIndex:i];
NSString * d = [sex objectAtIndex:i];
NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:a,@"id",b,@"name",c,@"age",d,@"sex", nil];
NSString *query = [NSString stringWithFormat:@"insert into table1 (id,name,age,sex) values('%@','%@','%@','%@')",[dic objectForKey:@"id"],[dic objectForKey:@"name"],[dic objectForKey:@"age"],[dic objectForKey:@"sex"]];
NSLog(@"%@",query);
[self executeQuery:query];
}
}
-(NSString *) dataFilePath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSLog(@"PATH %@",[documentsDirectory stringByAppendingPathComponent:DatabaseName]);
return [documentsDirectory stringByAppendingPathComponent:DatabaseName];
}
/*==================================================================
METHOD FOR INSERTING DATA IN DATABASE
==================================================================*/
-(void)executeQuery:(NSString *)query
{
//NSLog(@"QUERY : %@",query);
sqlite3_stmt *statement;
if(sqlite3_open([[self dataFilePath] UTF8String], &database) == SQLITE_OK)
{
if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL) == SQLITE_OK)
{
if (sqlite3_step(statement) != SQLITE_DONE)
{
sqlite3_finalize(statement);
}
}
else
{
NSLog(@"query Statement Not Compiled");
}
sqlite3_finalize(statement);
sqlite3_close(database);
}
else
{
NSLog(@"Data not Opened");
}
}
@end
Run Code Online (Sandbox Code Playgroud)
我也想要NSDictionary
更改例如数组是字典增加值更新sqlite完成.
请解释一下.
使用此方法:
/*==================================================================
METHOD FOR CHECKING WHETHER RECORD EXISTS OR NOT IN DATABASE
==================================================================*/
-(BOOL)recordExistOrNot:(NSString *)query{
BOOL recordExist=NO;
if(sqlite3_open([[self dataFilePath] UTF8String], &database) == SQLITE_OK)
{
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil)==SQLITE_OK)
{
if (sqlite3_step(statement)==SQLITE_ROW)
{
recordExist=YES;
}
else
{
//////NSLog(@"%s,",sqlite3_errmsg(database));
}
sqlite3_finalize(statement);
sqlite3_close(database);
}
}
return recordExist;
}
Run Code Online (Sandbox Code Playgroud)
如果记录不存在,它将返回YES.例如:
NSString *query = [NSString stringWithFormat:@"select * from yourtable where column_name = 'column_name'"];
NSLog(@"query : %@",query);
BOOL recordExist = [self recordExistOrNot:query];
if (!recordExist) {
// Insert your data
}
Run Code Online (Sandbox Code Playgroud)
希望它能帮到你.
归档时间: |
|
查看次数: |
4505 次 |
最近记录: |