使用SQLite存储和查询数据的简单实现(源代码+注释)
#import "ViewController.h" //定义宏方便引用 @interface ViewController () @end @implementation ViewController @synthesize name; @synthesize classname; @synthesize num; //ps;;如果出现未能识别的错误,那那个错误很可能跟控件的输入输出口错误有关。主要是逻辑错误 -(NSString*)databasePath //===========我把加载数据和获得路径的过程封装为一个方法 { NSString *docsDir; NSArray *dirPaths;
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); docsDir = [dirPaths objectAtIndex:0];
NSString *databasePath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@"info.db"]];//新建一个数据的名字
return databasePath; //返回路径 } - (IBAction)touch:(id)sender { [NSThread sleepForTimeInterval:0.1]; //延迟动作发生产生一点动画效果 CGAffineTransform pTransform = CGAffineTransformMakeTranslation(0,-100); //使视图使用这个变换 self.view.transform = pTransform;//移动view,不要挡着输入
[UIView commitAnimations]; // 动画效果 } - (IBAction)over:(id)sender {
[NSThread sleepForTimeInterval:0.1];
CGAffineTransform pTransform = CGAffineTransformMakeTranslation(0,0); //使视图使用这个变换 self.view.transform = pTransform; [UIView commitAnimations]; } - (void)viewDidLoad { NSLog(@"%@",NSHomeDirectory());
[super viewDidLoad]; NSString *databasePath=[self databasePath];//调用我原来封装的方法
NSFileManager *filemanager = [NSFileManager defaultManager];
if ([filemanager fileExistsAtPath:databasePath] == NO) { const char *dbpath = [databasePath UTF8String]; if (sqlite3_open(dbpath,&db)==SQLITE_OK) //这里的db是之前的添加的 *db { char *errmsg; const char *createsql = "CREATE TABLE IF NOT EXISTS INFO (ID INTEGER PRIMARY KEY AUTOINCREMENT,NUM TEXT,CLASSNAME TEXT,NAME TEXT)";//这里是sql语言的创建列表 if (sqlite3_exec(db,createsql,NULL,&errmsg)!=SQLITE_OK) { //status.text = @"create table failed."; 用来提示的lable NSLog(@"woain"); } }
} } -(IBAction)viewclick:(id)sender{ [num resignFirstResponder]; //让uiview继承uicontrl可以实现这些方法 [classname resignFirstResponder]; [name resignFirstResponder]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)load:(id)sender {
sqlite3_stmt *statement; NSString *databasePath=[self databasePath]; const char *dbpath = [databasePath UTF8String]; if (sqlite3_open(dbpath,&db)==SQLITE_OK) { NSString *querySQL = [NSString stringWithFormat:@"SELECT classname,name from info where num="%@"",num.text]; //================这里就实现了用号码查询,其他的可以另外实现 const char *querystatement = [querySQL UTF8String];
if (sqlite3_prepare_v2(db,querystatement,-1,&statement,NULL)==SQLITE_OK) {
if (sqlite3_step(statement)==SQLITE_ROW) { NSString *classnameField = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement,0)]; classname.text = classnameField; NSString *nameField = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement,1)];
name.text = nameField;
//status.text = @"find~~~"; } sqlite3_finalize(statement); } sqlite3_close(db); }} - (IBAction)save:(id)sender { NSString *databasePath=[self databasePath]; sqlite3_stmt *statement;
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath,&db)==SQLITE_OK) { if ([num.text isEqualToString:@""]) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"SORRY!" message:@"number cannot be nil!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; }
else {
NSString *insertSql = [NSString stringWithFormat:@"INSERT INTO INFO (num,classname,name) VALUES("%@","%@","%@")",num.text,classname.text,name.text]; const char *insertstaement = [insertSql UTF8String]; sqlite3_prepare_v2(db,insertstaement,NULL);
NSLog(@"chenggong"); if (sqlite3_step(statement)==SQLITE_DONE) { // status.text = @"save to DB."; num.text = @""; classname.text = @""; name.text = @""; NSLog(@"chenggong"); } else{ NSLog(@"sibai"); }
sqlite3_finalize(statement); sqlite3_close(db);
}
} } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |