IOS使用FMDB封装的数据库增删改查操作
//
// DBHelper.h
// LessonStoryBoard
//
// Created by 袁冬冬 on 15/10/29.
// Copyright (c) 2015年 袁冬冬. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "FMDB.h"
@interface DBHelper : NSObject
@property (nonatomic, strong) FMDatabaseQueue *databaseQueue; //数据库
- (void)openDB:(NSString *)dbName; //打开数据库,并创建数据库对象
- (void)executeupdate:(NSString *)sql; //执行更新SQL语句,用于插入、修改、删除
- (NSArray *)executeQuery:(NSString *)sql; //执行查询语句
@end
//
// DBHelper.m
// LessonStoryBoard
//
// Created by 袁冬冬 on 15/10/29.
// Copyright (c) 2015年 袁冬冬. All rights reserved.
//
#import "DBHelper.h"
@implementation DBHelper
- (void)openDB:(NSString *)dbName {
//获取数据库路径,通常保存到沙盒中
NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:dbName];
NSLog(@"%@",filePath);
//创建FMDatabaseQueue对象
self.databaseQueue = [FMDatabaseQueue databaseQueueWithPath:filePath];
}
- (void)executeupdate:(NSString *)sql {
//执行更新SQL语句
[self.databaseQueue inDatabase:^(FMDatabase *db) {
[db executeUpdate:sql];
}];
}
- (NSArray *)executeQuery:(NSString *)sql {
NSMutableArray *array = [NSMutableArray array];
[self.databaseQueue inDatabase:^(FMDatabase *db) {
//执行查询语句
FMResultSet *result = [db executeQuery:sql];
while (result.next) {
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
for (int i = 0; i < result.columnCount; i++) {
dic[[result columnNameForIndex:i]] = [result stringForColumnIndex:i];
}
[array addObject:dic];
}
}];
return array;
}
@end
//注册
//
// RegisterViewController.m
// LessonStoryBoard
//
// Created by 袁冬冬 on 15/10/29.
// Copyright (c) 2015年 袁冬冬. All rights reserved.
//
#import "RegisterViewController.h"
#import "DBHelper.h" //数据库操作类
@interface RegisterViewController ()
@property (weak, nonatomic) IBOutlet UITextField *usernameTF; //用户名
@property (weak, nonatomic) IBOutlet UITextField *passwordTF; //密码
@property (weak, nonatomic) IBOutlet UITextField *rePasswordTF; //确认密码
@property (weak, nonatomic) IBOutlet UITextField *emailTF; //邮箱
@property (weak, nonatomic) IBOutlet UITextField *phoneTF; //手机号
@end
@implementation RegisterViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
- (IBAction)reBackClick:(UIButton *)sender {
[self saveDataToDataBase]; //将数据存储到数据库
[self.navigationController popViewControllerAnimated:YES];
}
#pragma mark - save data in database
- (void)saveDataToDataBase {
DBHelper *dbHelper = [[DBHelper alloc] init];
[dbHelper openDB:@"contact.sqlite"]; //打开数据库,创建数据库对象
//创建表
[dbHelper executeupdate:@"create table if not exists t_user(username text primary key,password text,email text,phone text)"];
//插入信息
[dbHelper executeupdate:[NSString stringWithFormat: @"insert into t_user(username,password,email,phone) values(%@,%@,%@,%@)",self.usernameTF.text,self.passwordTF.text,self.emailTF.text,self.phoneTF.text]];
}
@end
//登陆
//
// LoginViewController.m
// LessonStoryBoard
//
// Created by 袁冬冬 on 15/10/29.
// Copyright (c) 2015年 袁冬冬. All rights reserved.
//
#import "LoginViewController.h"
#import "ListTableViewController.h"
#import "DBHelper.h"
@interface LoginViewController ()
@property (weak, nonatomic) IBOutlet UITextField *userNameTF; //用户名文本框
@property (weak, nonatomic) IBOutlet UITextField *passwordTF; //密码文本框
//默认的账号密码
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *password;
@end
@implementation LoginViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.name = @"admin";
self.password = @"123456";
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Action
//登录按钮响应事件
- (IBAction)LoginClick:(UIButton *)sender {
//获取数据库中的用户名和密码
NSDictionary *dic = [self gainDataFromDataBase];
NSString *myname = dic[@"username"];
NSString *mypw = dic[@"password"];
//创建UIAlertController
if ([self.userNameTF.text isEqualToString:myname] && [self.passwordTF.text isEqualToString:mypw]) {
//获取下一个视图控制器
ListTableViewController *listVC = [self.storyboard instantiateViewControllerWithIdentifier:@"list"];
[self alertController:@"欢迎回来" viewController:listVC];
} else {
[self alertController:@"账号或密码错误" viewController:nil];
}
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
//alertController提示框
- (void)alertController:(NSString *)message viewController:(UITableViewController *)controller {
UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"温馨提示" message:message preferredStyle:(UIAlertControllerStyleAlert)];
UIAlertAction *action = [UIAlertAction actionWithTitle:@"好" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
[self.navigationController pushViewController:controller animated:YES];
}];
[alertVC addAction:action];
[self presentViewController:alertVC animated:YES completion:nil];
}
#pragma mark - data from dataBase
- (NSDictionary *)gainDataFromDataBase {
DBHelper *dbHelper = [[DBHelper alloc] init];
[dbHelper openDB:@"contact.sqlite"]; //打开数据库,创建数据库对象
NSArray *array = [dbHelper executeQuery:[NSString stringWithFormat:@"select * from t_user where username = %@ and password = %@",self.userNameTF.text,self.passwordTF.text]];
return array[0];
}
@end
IOS使用FMDB封装的数据库增删改查操作的更多相关文章
- (转)SQLite数据库增删改查操作
原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数 ...
- Android SQLite 数据库 增删改查操作
Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...
- Android_SQLite数据库增删改查操作
一:什么是SQLite? 在Android平台上,集成了一个嵌入式关系型轻量级的数据库. 二:什么时候用的数据库? 有大量相似机构的数据需要存储时. 三:如何创建一个数据库? 1.创建一个Sqlite ...
- jmeter-Java-MongoDB 数据库增删改查操作
在日常测试过程中会发现有些测试数据是通过数据库来获取的,一般常用的数据比如SQL .Oracle,此类数据库jmeter有专门的插件进行使用JDBC,今天跟大家说一说关于Mongodb这个数据库jme ...
- SQLite数据库增删改查操作
一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库——SQLite,SQLite3支持NULL.INTEGER.REAL(浮点数字).TEXT(字符串 ...
- Android SQLite数据库增删改查操作
一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库——SQLite,SQLite3支持NULL.INTEGER.REAL(浮点数字). TEXT(字符 ...
- java连接mysql数据库增删改查操作记录
1. 连接数据库.得到数据库连接变量 注意连接数据库的时候 (1)打开DB Browser 新建一个Database Driver,注意加入Driver JARs的时候加入的包,我的是mysql-co ...
- SpringBoot结合Mybatis 使用 mapper*.xml 进行数据库增删改查操作
什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架. MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索. MyBa ...
- 数据库-增删改查操作SQL实现
一.数据插入-Insert 1. 插入单条记录 insert into 表名(字段名,字段名,字段名) //当插入所有字段时,字段名可以省略 values('值1','值2','值3'); 2. 插入 ...
随机推荐
- unix下各种包安装方法备忘
deb包 : sudo dpkg -i google-chrome-stable_amd64.deb
- Java基础---Java---基础加强---内省的简单运用、注解的定义与反射调用、 自定义注解及其应用、泛型及泛型的高级应用、泛型集合的综合
内省的简单运用: JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则. 采用遍历BeanInfo的所有属性方式来查找和 ...
- Volley,小并发网络请求的好帮手
不得不说,当不了解一件事情的时候,就会像当然的认为,其很神秘.但是当真正的接触到了这些神秘的item,就不会有这种感觉了.作为一个android开发新手的我,刚接触到了Volley这个开源的网络请求框 ...
- (NO.00004)iOS实现打砖块游戏(十):砖块!更多的砖块!
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 到目前为止游戏基本可玩,但是砖块数量是不变的,等玩家打光所有的砖 ...
- J2EE学习从菜鸟变大鸟之七 Servlet
Servlet现在自己的理解是一个控制器,简单的可以理解为不同的JSP页面由用户发送过来的请求可以由Servlet控制器来控制其向下调用的方向(结合三层好理解),但它比较特殊,因为它通常会从外界接收数 ...
- Java-Io之文件File
File是"文件"和"目录路径名"的抽象表示形式.File之间继承Object,实现了Serializable和Comparable接口,因此文件支持File对 ...
- 分布式进阶(三)Ubuntu 14.04 之JDK安装
Ubuntu 10.04 之JDK安装 1.从官网 (http://www.Oracle.com/technetwork/java/javase/downloads/jdk6u35-downloads ...
- 漫谈程序员(十二)IT程序猿之猿体是革命的本钱
IT程序猿之猿体是革命的本钱 前言 程序猿的一大特点就是加班.加班.不停地加班.... 为了美好的生活,为了生活的更加美好.我们选择勤勤恳恳,踏踏实实. 但是,工作只是生活的一部分.生命中最重要的莫过 ...
- Leetcode_13_Roman to Integer
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41486885 通过本文你可能学到的知识如下: (1)理解本 ...
- PKU 3468 A Simple Problem with Integers
题目大意: 有N,M两个数 Q 表示查询, 后面两个数a b,表示查询从a 到b计算它们的和 C 表示增加 后面三个数a,b,c 表示从a开始,一直到b,每个数都增加c 除了查询要进行输出,增加不 ...