一.FMDB 的框架引入点击此处去GitHub下载

二.FMDB 的优缺点

  优点:使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码;对比苹果自带的Core Data框架,更加轻量级和灵活;提供了多线程安全的数据库操作方法,有效地防止数据混乱。

三.FMDB 中三个基础类:

1.FMDatabase一个FMDatabase对象就代表一个单独的SQLite数据库用来执行SQL语句;

2.FMResultSet使用FMDatabase执行查询后的结果集;

3.FMDatabaseQueue用于在多线程中执行多个查询或更新,它是线程安全的;

四.用一个实际列子学习FMDB的简单使用,包括数据库的建立、表的建立、数据的插入、数据的查询,其中数据插入,删除、更改、建表操作方式相同。

  1..h文件的内容

//
// ViewController.h
// FMDB
//
// Created by linan on 15/3/30.
// Copyright (c) 2015年 ln. All rights reserved.
// #import <UIKit/UIKit.h> @interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *userName;
@property (weak, nonatomic) IBOutlet UITextField *passWord; - (IBAction)sureButton:(id)sender;
- (IBAction)registButton:(id)sender; @end

2..m文件

//
// ViewController.m
// FMDB
//
// Created by linan on 15/3/30.
// Copyright (c) 2015年 ln. All rights reserved.
// #import "ViewController.h"
#import "FMDB.h"
@interface ViewController ()
@property(nonatomic,strong)FMDatabase *db;
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Documents/"];
NSString *fmdbPath = [path stringByAppendingString:@"student.sqlite"];
NSLog(@"path = %@",path);
self.db = [FMDatabase databaseWithPath:fmdbPath];
if (![self.db open]) {
NSLog(@"数据库没有打开");
}else{
NSLog(@"数据库已经打开"); //creat table
BOOL result = [self.db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT ,name text NOT NULL ,age integer NOT NULL,password text NOT NULL);"];
if (result) {
NSLog(@"creat student is success!"); //successfully create and insert date
// [self insertDate];
}else{
NSLog(@"creat student is fail!");
} } }
-(void)insertDate{
for (int i = ; i < ; i++) {
NSString *student_name = [NSString stringWithFormat:@"fool-%d",arc4random()%];
NSString *student_passWord = [NSString stringWithFormat:@""];
int student_age = arc4random()%; //未知类型用占位符表示
[self.db executeUpdate:@"INSERT INTO t_student (name,password,age) VALUES(?,?,?);",student_name,student_passWord,@(student_age)];
} }
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} //search date from sqlite
- (IBAction)sureButton:(id)sender {
//execute result
FMResultSet *result = [self.db executeQuery:@"SELECT *FROM t_student"]; while ([result next]) {
NSString *name = [result stringForColumn:@"name"];
NSString *password = [result stringForColumn:@"password"];
if ([self.userName.text isEqualToString:name]&&[self.passWord.text isEqualToString:password]) {
[self showAlert:@"登陆成功"];
break;
}else{
//
} } } - (IBAction)registButton:(id)sender {
NSString *student_name = @"zhuce";
int age = ;
NSString *student_passWord = @"";
if ([self.db open]) {
[self.db executeUpdate:@"INSERT INTO t_student (name,password,age) VALUES (?,?,?);",student_name,student_passWord,@(age)]; }
}
-(void)showAlert:(NSString*)message{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示:" message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
}
@end

简单说明:寻找沙盒中得路径->建立数据库->(open)创建t_students并设置四个字段用来存储学生信息->插入数据。

做一个简单的页面登陆,从数据库中查找学生信息,如有则可以登陆,否则不能登陆可进行注册账号(数据插入操作)

图一是数据库中得数据,图二为storyBoard中拖拉控件。

注意:参数必须是NSObject的子类,所以象int,double,bool这种基本类型,需要封装成对应的包装类才行。

FMDB的简单实用的更多相关文章

  1. jQuery的几种简单实用效果

    许久未分享博客,或许已生疏. 闲来无事, 分享几个jQuery简单实用的效果案例 不喜勿喷... 1.页面常用的返回顶部 <!DOCTYPE html> <html lang=&qu ...

  2. 经验分享:10个简单实用的 jQuery 代码片段

    尽管各种 JavaScirpt 框架和库层出不穷,jQuery 仍然是 Web 前端开发中最常用的工具库.今天,向大家分享我觉得在网站开发中10个简单实用的 jQuery 代码片段. 您可能感兴趣的相 ...

  3. 简单实用的PHP防注入类实例

    这篇文章主要介绍了简单实用的PHP防注入类实例,以两个简单的防注入类为例介绍了PHP防注入的原理与技巧,对网站安全建设来说非常具有实用价值,需要的朋友可以参考下   本文实例讲述了简单实用的PHP防注 ...

  4. php简单实用的操作文件工具类(创建、移动、复制、删除)

    php简单实用好用的文件及文件夹复制函数和工具类(创建.移动.复制.删除) function recurse_copy($src,$dst) {  // 原目录,复制到的目录 $dir = opend ...

  5. 基于Bootstrap简单实用的tags标签插件

    http://www.htmleaf.com/jQuery/ jQuery之家 自由分享jQuery.html5和css3的插件库 基于Bootstrap简单实用的tags标签插件

  6. C#_简单实用的翻页

    简单实用的生成翻页HTML辅助类 C# using System.Text; namespace ClassLibrary { /// <summary> /// /// </sum ...

  7. 简单实用的Windows命令(一)

    前几天新买了一台笔记本电脑,使用了一下几个简单的查看电脑配置的命令,觉得非常的不错,在此记录一下 一:运行命令的方式有两种 1:使用快捷键WIN+R,然后在弹出的“运行”对话框中输入对应的命令 2:在 ...

  8. 简单实用的Windows命令(二)

    昨天简单的记录了几个非常简单实用的Windows命令,不过我又想起来还有两个我在实际的工作中也是经常用到的命令——PING和IPCONFIG,不过我在工作中的使用都是非常简单的,用PING命令检测对应 ...

  9. iOS边练边学--多线程介绍、NSThread的简单实用、线程安全以及线程之间的通信

    一.iOS中的多线程 多线程的原理(之前多线程这块没好好学,之前对多线程的理解也是错误的,这里更正,好好学习这块) iOS中多线程的实现方案有以下几种 二.NSThread线程类的简单实用(直接上代码 ...

随机推荐

  1. 一键安装 redmine on rhel6.4

    一键安装 redmine on rhel6.4 一键式安装redmine省去了大量不必要的时间.下载:bitnami-redmine-2.5.2-1-linux-x64-installer.run. ...

  2. navicat里导入和导出.sql文件

    一:Navicat导入MySQL的.sql文件. 打开连接connection,选择你要导入的数据库,双击打开(或者新建一个),然后右键该数据库,选"运行批次任务文件(execute sql ...

  3. Android系统服务详解-android学习之旅(95)

    本文是看完android框架揭秘第六章后的总结 android系统服务提供最基本的,最稳定的核心功能,如设备控制,信息通知,通知设定,以及消息显示等,存在于Android Framework与Andr ...

  4. objective-c中@autoreleasepool的用法

    objc中关于自动释放池,有两种语法,一种old-fashioned是: NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //d ...

  5. Spring 学习笔记 ----依赖注入

    依赖注入 有三种方式,本文只学习下属性注入. 属性注入       属性注入即通过 setXxx方法()注入Bean的属性值或依赖对象,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入方式是 ...

  6. ruby rails_autolink不能加载的原因

    从rails 3.1.0开始,默认在ActionView::Helper::TextHelper中的auto_link方法已经被移除,放到了第三方的gem里:rails_autolink.遂想试一下其 ...

  7. OpenShift实战(七):OpenShift定制镜像S2I

    1.基础镜像制作 由于公司的程序是Java开发,上线发布使用的是maven,如果使用openshift自带的S2I,每次都会全量拉取代码(代码比较多,每次全量拉太慢),然后每次打包都会再一次下载mav ...

  8. 什么才是java的基础知识?

    近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考. ...

  9. word search(二维数组中查找单词(匹配字符串))

    Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from l ...

  10. Ribbon整合Eureka组件,以实现负载均衡

    1整体框架的说明 在本案例的框架里,我们将配置一个Eureka服务器,搭建三个提供相同服务的Eureka服务提供者,同时在Eureka服务调用者里引入Ribbon组件,这样,当有多个url向服务调用者 ...