一.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. (视频)《快速创建网站》2.1 在Azure上创建网站及网站运行机制

    现在让我们开始一天的建站之旅. 本文是<快速创建网站>系列的第2篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 1. 网站管理平台WordPress和 ...

  2. 【代码管理】GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流

    GitHub操作总结 : 总结看不明白就看下面的详细讲解. . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details ...

  3. linux下播放组播流出现setsockopt:No such device错误

    在linux下播放组播流出现setsockopt:No such device错误是因为多播IP没有add路由表里面 可以采用如下命令完成: root@android:/ # busybox rout ...

  4. LeetCode之“链表”:Remove Duplicates from Sorted List && Remove Duplicates from Sorted List II

    1. Remove Duplicates from Sorted List 题目链接 题目要求: Given a sorted linked list, delete all duplicates s ...

  5. java5后的并发池

    本文可作为传智播客<张孝祥-Java多线程与并发库高级应用>视频的学习记录. 为什么需要并发池 之前写并发的时候 new Thread(new Runnable(){ public voi ...

  6. how tomcat works 六 生命周期

    我觉得这一章叫tomcat中的观察者模式,比较好! 首先,不要看本章,请查看一下关于观察者模式的资料比较好. 推荐以下知识点 基础篇 设计模式之禅----观察者模式 大家可以找到pdf阅读一下 另外本 ...

  7. 【LaTeX排版】LaTeX论文排版<二>

    1.目录的生成     直接使用命令\tableofcontents即可.其默认格式如下: 我们会发现,这样的格式不一定是我们所期望的.比如说,我们也希望章标题与页码之间也有点连线,并且也希望将致谢. ...

  8. Unity与web交互

    Unity在发布web时,重要的是Unity与Web的交互,参数的传递 1.unity调用网页js的函数:Application.ExternalCall js函数: <script langu ...

  9. linux信号量与完成量

    信号量:    是用于保护临界区的一种常用方法,它的使用和自旋锁类似.与自旋锁相同,只有得到信号量的进程才能执行 临界区的代码.但是与自旋锁不同的是,当获取不到信号量时,进程不会原地打转而是进入休眠等 ...

  10. Python Tips阅读摘要

    发现了一本关于Python精通知识点的好书<Python Tips>,关于Python的进阶的技巧.摘录一些比较有价值的内容作为分享. *args and **kwargs 在函数定义的时 ...