经过昨天下午和今天上午的不懈努力,终于通过了SQLite的学习。

我们现在这里定义一个有关SQLIte的封装类,便于我在后面的用户注册,用户密码找回,和登录界面的使用

1.首先我们看看我们建立的userModel,虽然很多属性没有使用,但是作为备用

LCUserMessageModel.h文件。

#import <Foundation/Foundation.h>

@interface LCUserMessageModel : NSObject<NSCoding>

@property (assign,nonatomic)NSInteger QQ;

@property (copy,nonatomic)NSString *userName;
@property (copy,nonatomic)NSString *userAddress;
@property (copy,nonatomic)NSString *userMobilephineNumber;
@property (copy,nonatomic)NSString *userPassword;
@property (copy,nonatomic)NSString *userRePassword;
@property (copy,nonatomic)NSString *userStuID;
@property (copy,nonatomic)NSString *userSeriousFriendName;
@property (copy,nonatomic)NSString *userPIDSixNumber; @end

LCUserMessageModel.m文件,要说明的是,如果我是用了SQLite进行存储,那么就不需要NSCODing协议了,但是我使用的原因是因为我多次修改,使用了文件存储的方法。

//
// LCUserMessageModel.m
// 手机QQ客户端
//
// Created by lichan on 13-12-11.
// Copyright (c) 2013年 com.lichan. All rights reserved.
// #import "LCUserMessageModel.h" @implementation LCUserMessageModel @synthesize QQ, userAddress,userMobilephineNumber,userName,userPassword,userPIDSixNumber,userRePassword,userSeriousFriendName,userStuID; - (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeInteger:QQ forKey:@"QQ"];
[aCoder encodeObject:userName forKey:@"userName"];
[aCoder encodeObject:userAddress forKey:@"userAddress"];
[aCoder encodeObject:userMobilephineNumber forKey:@"userMobilephineNumber"];
[aCoder encodeObject:userPassword forKey:@"userPassword"];
[aCoder encodeObject:userRePassword forKey:@"userRePassword"];
[aCoder encodeObject:userStuID forKey:@"userStuID"];
[aCoder encodeObject:userSeriousFriendName forKey:@"userSeriousFriendName"];
[aCoder encodeObject:userPIDSixNumber forKey:@"userPIDSixNumber"]; } - (id)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super init]) {
self.QQ = [aDecoder decodeIntegerForKey:@"QQ"];
self.userName = [aDecoder decodeObjectForKey:@"userName"];
self.userAddress = [aDecoder decodeObjectForKey:@"userAddress"];
self.userMobilephineNumber = [aDecoder decodeObjectForKey:@"userMobilephineNumber"];
self.userPassword = [aDecoder decodeObjectForKey:@"userPassword"];
self.userRePassword = [aDecoder decodeObjectForKey:@"userRePassword"];
self.userStuID = [aDecoder decodeObjectForKey:@"userStuID"];
self.userSeriousFriendName = [aDecoder decodeObjectForKey:@"userSeriousFriendName"];
self.userPIDSixNumber = [aDecoder decodeObjectForKey:@"userPIDSixNumber"];
} return self; } -(NSString *)description
{
return [NSString stringWithFormat:@"QQ:%d password:%@",self.QQ,self.userPassword];
} @end

2.关于SQLite进行属性封装的类。很明显,我继承了NSOBject类型。注释给予说明

#import <Foundation/Foundation.h>
#import <sqlite3.h>
@class LCUserMessageModel;
@interface LCSQLite3Methods : NSObject
{
sqlite3 *database;
NSError *error;
NSString *DBFilePath;
} - (LCUserMessageModel *)queryFromDB; //查找所有的QQ注册信息,很多时候用不上 - (NSInteger)insertORUpdateToDB:(LCUserMessageModel *)user;//注册账号的使用调用 - (NSMutableArray *)findUserPasswordByMobilePhoneNumber:(NSString *)phoneNumber;//找回密码界面调用此方法 - (NSMutableArray *)findUserPasswordByQQ:(NSInteger )qq Password:(NSString *)password;//用户登录时候调用此方法
@end

3.密码找回界面,SQLite接口类的使用

1)LCFInd.h文件,不再赘述

#import <UIKit/UIKit.h>
@class LCSQLite3Methods; @interface LCFindPSWViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextField *mobilePhoneNumber; @property (strong,nonatomic)LCSQLite3Methods *SQLiteMethods; - (IBAction)findPSWButtonPressed:(id)sender; -(IBAction)textFieldDoneEditing:(id)sender; @end

2)实现文件,由于我只能依赖手机号进行找回,除非用户写入了QQ。唯一保险的办法是直接找回所有通过此手机号注册的所有QQ和密码。后续会完善此BUG。

#import "LCFindPSWViewController.h"
#import "LCSQLite3Methods.h"
#import "LCUserMessageModel.h" @interface LCFindPSWViewController ()
@property (strong,nonatomic)LCUserMessageModel *userModel;
@end @implementation LCFindPSWViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) { self.title = @"密码找回"; // Custom initialization
}
return self;
} - (void)viewDidLoad
{
[super viewDidLoad];
self.navigationController.navigationBarHidden = NO;
self.SQLiteMethods = [[LCSQLite3Methods alloc]init];
// Do any additional setup after loading the view from its nib.
} - (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} - (IBAction)findPSWButtonPressed:(id)sender { NSString *MPnumber = self.mobilePhoneNumber.text; NSMutableArray *findArray =[self.SQLiteMethods findUserPasswordByMobilePhoneNumber:MPnumber]; NSString *message = [NSString stringWithFormat:@"此手机号注册的QQ号码:%@",findArray];
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"恭喜您,密码找回成功!" message:message delegate:self cancelButtonTitle:@"好的" otherButtonTitles:nil]; [alertView show]; // self.userModel = [[LCUserMessageModel alloc]init];
//
// NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSAllDomainsMask, YES) objectAtIndex:0];
// NSString *userFilePath = [path stringByAppendingPathComponent:self.mobilePhoneNumber.text];
//
// NSMutableData *data = [NSMutableData dataWithContentsOfFile:userFilePath];
//
// self.userModel = [NSKeyedUnarchiver unarchiveObjectWithData:data];
//
// NSString *MPnumber = self.mobilePhoneNumber.text;
//
// NSString *message = [NSString stringWithFormat:@"已初始化账号为%@的密码为%@,请尽快修改密码。",MPnumber,self.userModel.userPassword];
// UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"恭喜您,密码找回成功!" message:message delegate:self cancelButtonTitle:@"好的" otherButtonTitles:nil];
//
// [alertView show];
} #pragma mark 取消键盘响应的方法
-(IBAction)textFieldDoneEditing:(id)sender
{
[sender resignFirstResponder]; } @end

[课堂实践与项目]手机QQ客户端--4期(SQLite的加入,注册,找回,登录界面的修改):建立关于QQ注册类,使用SQLite进行存储,的更多相关文章

  1. [课堂实践与项目]NavigationController与TabBarController的综合使用及易错点分析(包含消息提醒,app更新)

    陈述:我们在使用tabbarController的时候,我们总会和NavagationController联合起来.但是不联合的时候又是什么样的一种pool的情况呢?我们就单单的 TabBarCont ...

  2. [课堂实践与项目]IOS优先级的计算器

    这个计算器主要是使用数组进行实现的.虽然没有使用前缀后缀表达式,但是是一种方法o. .h文件 // // LCViewController.h // 具有优先级的calculator // // Cr ...

  3. [课堂实践与项目]IOS只能进行简单的加减乘除的没有优先级的计算器

    // // LCViewController.m // calculator // // Created by lichan on 13-12-3. // Copyright (c) 2013年 co ...

  4. app分享时判断手机是否已安装微信或QQ客户端

    /** * 判断 用户是否安装微信客户端 */ public static boolean isWeixinAvilible(Context context) { final PackageManag ...

  5. 2016-2017-2 《Java 程序设计》课堂实践项目

    目录 基本工具 基础内容 Hello World 和 模块分解 数组的使用 命令行参数 递归 分支语句 String类的使用 类的定义与测试 多态 IO与异常 数据库 网络与安全 数据结构应用 And ...

  6. 《Java 程序设计》课堂实践项目 课后学习总结

    <Java 程序设计>课堂实践项目 课后学习总结 String类的使用(sort) 目录 Linux命令(sort) 课堂实践 课后思考 学习老师的代码之后的思考:int与Integer ...

  7. 《Java 程序设计》课堂实践项目汇总链接

    1.<Java 程序设计>课堂实践项目-命令行参数 2.<Java 程序设计>课堂实践项目-mini dc 3.<Java 程序设计>课堂实践项目-Arrays和S ...

  8. 《Java 程序设计》课堂实践项目-类定义

    <Java 程序设计>课堂实践项目类定义 课后学习总结 目录 改变 类定义实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有修改. ...

  9. 《Java 程序设计》课堂实践项目-简易计算器

    <Java 程序设计>课堂实践项目简易计算器 课后学习总结 目录 改变 简易计算器实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有 ...

随机推荐

  1. Yii 权限分级式访问控制实现(非RBAC法)

    以下由我们在信易网络公司开发项目的时候终结出的一些经验 主要参考资料:yii官网http://www.yiiframework.com/wiki/60/yii framework 提供了2套权限访问系 ...

  2. (转载)通过dbgrideh 从数据集中选择合适的记录

    通过dbgrideh 从数据集中选择合适的记录 //---------------------------------------------------------// 通过dbgrideh 从数据 ...

  3. 启动python解释器的命令(python manage.py shell和python的区别)

    如果你曾经使用过Python,你一定好奇,为什么我们运行python manage.py shell而不是python.这两个命令都会启动交互解释器,但是manage.py shell命令有一个重要的 ...

  4. Linux ln命令 - 建立文件/目录链接

    转自Linux ln命令 - 建立文件/目录链接 1. 使用方式:ln [option] source_file dist_file                     -f 建立时,将同档案名删 ...

  5. POJ 1778 All Discs Considered(拓扑排序)

    点我看题目 题意 :其实题意我也说不清楚,因为比赛的时候我盯着看了1个小时也没看懂....就是两个磁盘,第一个有n1的安装包,编号为1~n1,第二个有n2个安装包,编号为n1~n2.给你d对关系,(x ...

  6. 【UVA 1151】 Buy or Build (有某些特别的东东的最小生成树)

    [题意] 平面上有n个点(1<=N<=1000),你的任务是让所有n个点连通,为此,你可以新建一些边,费用等于两个端点的欧几里得距离的平方. 另外还有q(0<=q<=8)个套餐 ...

  7. Chapter 32:动态规划一 总结

    今天做了四道dp题,分数306. 就从我的做题顺序开始讲.. 首先是第四题,明显的记录模数DP,很快打出来了. 后来做完之后回来拍第四题,也没有什么问题,就AC了. 然后是第三题,我的性子真是太急了, ...

  8. 单位有b\B\K\M\G的相互转换

    计算机存储计量单位 1. 计算机最小存储计量单位是:BIT(位) 2. 计算机最基本存储计量单位是:Bytes(字节) 3. Bit和Bytes的关系:8Bit=1Bytes 4. 其他常用单位:1K ...

  9. VS2010 C# 调用Web Service .

    转自:http://blog.csdn.net/fenglailea/article/details/7262566 打开VS2010,打开"文件-新建-网站",选择"A ...

  10. [转贴]sizeof 和strlen的区别

    1. 编译时计算运算符sizeof,可用类型或变量做参数,计算占用内存的大小.sizeof后若是类型必须加括弧,若是变量名可不加括弧.sizeof(x)可用来定义数组维数.如:printf(" ...