嵌入式数据库

SQLite嵌入式数据库的优势

1.支持事件,你并不需要配置,无需安装,不需要管理员

2.支持部分脂肪SQL92

3.完整的数据库被存储在磁盘上的文件的顶部,相同的数据库文件可以在不同机器上面使用,最大支持数据库2T

4.整个系统少于3万行,少于250KB的内存占用

Linux系统级的SQLite技术实现框架libsqlite3.0.dylib

開始使用SQLite

1.引入<sqlite3.h>头文件

2.打开数据库

3.运行SQL命令

4.关闭数据库

一下代码展示整个数据库的 打开,关闭,添加,删除,查找,改动,

创建一个单例

#import <Foundation/Foundation.h>
@class Student;
@interface DataBaseHandle : NSObject
//创建一个单例
+(DataBaseHandle *)shareDB; //获取Documents路径
- (NSString *)documentsPath; //打开数据库
- (void)openDB; //关闭数据库
- (void)closeDB; //创建表
- (void)createTable; //插入信息
- (void)insertStudent:(Student *)stu; //改动信息
- (void)updateMessage; //删除信息
- (void)deleteMessage; //查找所有
- (void)selectAllStudent; //条件查找
- (void)selectWithSex:(NSString *)sex; @end
#import "DataBaseHandle.h"
#import <sqlite3.h>
#import "Student.h"
//全局单利对象
static DataBaseHandle *shareModle = nil;
@implementation DataBaseHandle
#pragma mark 实现单利
+ (DataBaseHandle *)shareDB
{
if (nil == shareModle)
{
shareModle = [[DataBaseHandle alloc] init];
}
return shareModle;
} #pragma mark 获取Documents路径
- (NSString *)documentsPath
{
NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
return documentPath;
} //在操作数据之前引入框架(sql...3.0)
//声明一个数据库的对象
static sqlite3 *db = nil;
#pragma mark 打开数据库
- (void)openDB
{
//推断数据库是不是为空
if (nil == db)
{
//与documents路径拼接数据库存放路径(获得存放路径)
NSString *dbPath = [[self documentsPath] stringByAppendingString:@"/Student.sqlite"];
//依据路径打开数据库,如该路径下没有数据库,就自己主动创建一个数据库
//打开数据库(c语言中的语法)
int result = sqlite3_open(dbPath.UTF8String, &db);
//推断是否打开数据库成功
if (result == SQLITE_OK)
{
NSLog(@"数据库打开成功");
}
else
{
NSLog(@"数据库打开失败");
}
}
} #pragma mark 关闭数据库 - (void)closeDB
{
int result = sqlite3_close(db);
if (result == SQLITE_OK)
{
//假设关闭成功,置为nill
db = nil;
NSLog(@"数据库关闭成功");
}
else
{
NSLog(@"数据库关闭失败");
}
} #pragma mark 创建表
- (void)createTable
{
//要创建表,就要使用SQL语句.
//SQL语句在这是以字符串的形式存在的
NSString *createString = @"CREATE TABLE IF NOT EXISTS student (sid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , sname TEXT, ssex TEXT, sage TEXT)";
//运行SQL语句
int result = sqlite3_exec(db, createString.UTF8String, NULL, NULL, NULL); if (result == SQLITE_OK)
{
NSLog(@"创建表成功");
}
else
{
NSLog(@"创建失败");
} } #pragma mark 插入信息
- (void)insertStudent:(Student *)stu
{
//准备插入语句
NSString *insertString = [NSString stringWithFormat:@"INSERT INTO student (sname,ssex,sage) VALUES ('%@','%@','%@')",stu.name,stu.sex,stu.age];
//运行语句
int result = sqlite3_exec(db, insertString.UTF8String, NULL, NULL, NULL);
if (result == SQLITE_OK)
{
NSLog(@"插入成功");
}
else
{
NSLog(@"插入失败");
} } #pragma mark 改动数据
- (void)updateMessage
{
//准备改动语句
NSString *undataString = @"UPDATE student SET ssex = '女' ,sname = '小梦' WHERE sid = 10";
int result = sqlite3_exec(db, undataString.UTF8String, NULL, NULL, NULL);
if (result == SQLITE_OK)
{
NSLog(@"改动成功");
}
else
{
NSLog(@"改动失败");
} } #pragma mark 删除数据
- (void)deleteMessage
{
//准备删除语句
NSString *deleteString = @"DELETE FROM student WHERE sid = 1";
int result = sqlite3_exec(db, deleteString.UTF8String, NULL, NULL, NULL);
if (result == SQLITE_OK)
{
NSLog(@"delete OK");
}
else
{
NSLog(@"delete _NO");
} } #pragma mark 查找所有
- (void)selectAllStudent
{
//准备查找语句
NSString *selectAll = @"SELECT *FROM student";
//创建伴随指针
sqlite3_stmt *stmt = nil; //预备运行
int result = sqlite3_prepare(db, selectAll.UTF8String, -1, &stmt, NULL);
if (result == SQLITE_OK)
{
//在没有查找完毕之前一直循环运行
while (sqlite3_step(stmt) == SQLITE_ROW)
{
//取出sid(第0列)
NSInteger sid = sqlite3_column_int(stmt, 0);
//取出sname(第1列)
NSString *sname = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
//取出ssex(第2列)
NSString *ssex = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];
//取出sage(第3列)
NSString *sage = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 3)];
NSLog(@"sid:%d sname:%@ ssex:%@ sage:%@",sid,sname,ssex,sage); }
sqlite3_finalize(stmt);
}
else
{
//假设查找失败,结束伴随指针
sqlite3_finalize(stmt);
NSLog(@"查找失败");
} }
#pragma mark 条件查找
- (void)selectWithSex:(NSString *)sex
{
//准备查找语句
NSString *selecstString = @"SELECT * FROM student WHERE ssex = ? ";
//创建伴随指针
sqlite3_stmt *stmt = nil;
//预运行
int result = sqlite3_prepare(db, selecstString.UTF8String, -1, &stmt, NULL); if (result == SQLITE_OK)
{
//绑定?的值
//"1"代表第一个问号"? "和哪个參数绑定
sqlite3_bind_text(stmt, 1, sex.UTF8String, -1, NULL);
while (sqlite3_step(stmt) == SQLITE_ROW)
{ NSInteger sid = sqlite3_column_int(stmt, 0);
NSString *sname = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
NSString *ssex = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];
NSString *sage = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 3)];
NSLog(@"sid: %d sname: %@ ssex: %@ sage: %@",sid,sname,ssex,sage); } }
else
{
//关闭指针
sqlite3_finalize(stmt);
NSLog(@"查询失败");
}
} @end

创建一个Student类

#import <Foundation/Foundation.h>

@interface Student : NSObject
@property(nonatomic,strong)NSString *name;
@property(nonatomic,strong)NSString *age;
@property(nonatomic,strong)NSString *sex;
@end

在 ViewController.m中 ViewDidLoad 调用方法

    //打印路径
NSLog(@"%@",[[DataBaseHandle shareDB] documentsPath]);
//打开数据库
[[DataBaseHandle shareDB] openDB];
//创建表
[[DataBaseHandle shareDB] createTable]; //插入信息
// Student *stu = [[Student alloc] init];
// stu.name = @"小露";
// stu.age = @"29";
// stu.sex = @"女";
// [[DataBaseHandle shareDB] insertStudent:stu];
//改动
// [[DataBaseHandle shareDB] updateMessage];
//删除
// [[DataBaseHandle shareDB] deleteMessage];
//查找所有信息
// [[DataBaseHandle shareDB] selectAllStudent];
//依据条件查找信息
[[DataBaseHandle shareDB] selectWithSex:@"女"];

版权声明:本文博主原创文章,博客,未经同意不得转载。

IOS 数据库管理系统(SQLite)的更多相关文章

  1. iOS数据处理之SQLite数据库

    1. 数据库管理系统 1> SQL语言概述 SQL: SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集, 是一种功能齐全的 ...

  2. iOS开发数据库篇—SQLite简单介绍

    iOS开发数据库篇—SQLite简单介绍 一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1 ...

  3. iOS开发数据库篇—SQLite的应用

    iOS开发数据库篇—SQLite的应用 一.简单说明 在iOS中使用SQLite3,首先要添加库文件libsqlite3.dylib和导入主头文件. 导入头文件,可以使用库中的函数(是纯C语言的) 二 ...

  4. IOS开发数据库篇—SQLite模糊查询

    IOS开发数据库篇—SQLite模糊查询 一.示例 说明:本文简单示例了SQLite的模糊查询 1.新建一个继承自NSObject的模型 该类中的代码: // // YYPerson.h // 03- ...

  5. iOS开发数据库篇—SQLite常用的函数

    iOS开发数据库篇—SQLite常用的函数 一.简单说明 1.打开数据库 int sqlite3_open( const char *filename,   // 数据库的文件路径 sqlite3 * ...

  6. 【转】 iOS开发数据库篇—SQLite简单介绍

    开始学SQLite啦, 原文: http://www.cnblogs.com/wendingding/p/3868893.html iOS开发数据库篇—SQLite简单介绍 一.离线缓存 在项目开发中 ...

  7. iOS学习笔记(十五)——数据库操作(SQLite)

    SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的 ...

  8. FMDB是iOS平台的SQLite数据库框架

    1.FMDB简介 什么是FMDBFMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 为什么使用FMDB使用起来更加面向对象,省去了很多麻烦.冗余的C语言 ...

  9. 【转】iOS学习笔记(十五)——数据库操作(SQLite)

    SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的 ...

随机推荐

  1. UIApplicationsharedApplication的常用使用方法

    下面是这个类的一些功能: 1.设置icon上的数字图标 //设置主界面icon上的数字图标,在2.0中引进, 缺省为0 [UIApplicationsharedApplication].applica ...

  2. Java集合类汇总记录-- apache.commons4(TreeList)

    通常.Tree是Tree,List是List,两者不太可能混在一起.但apache-commons库却用tree实现了实现了List的接口,也就是TreeList类.与标准的LinkedList相比. ...

  3. 简单fcgi程序

    1.头文件 #include <fcgi_stdio.h> 2.while(FCGI_Accept()>=0)//这里进入循环,前台每请求一次fcgi服务,就循环一次 循环内处理: ...

  4. 三层架构与MVC

    三层简介 先说说Web三层架构这个古老话题.地球人都知道web三层架构是指: • >用户接口层(UI Layer) • >业务逻辑层(Bussiness Layer) • >持久化层 ...

  5. C语言程序代写(QQ:928900200)

    1.学生成绩统计 要求描述: 用结构数组实现学生信息的统计功能. struct student { long no; /*学号*/ char name[10]; /*姓名*/ char sex; /* ...

  6. sql查询 数据库 表 字段 等

    1.查询数据库中的所有数据库名: SELECT Name FROM Master..SysDatabases ORDER BY Name 2.查询某个数据库中所有的表名: SELECT Name FR ...

  7. BZOJ 3747 POI2015 Kinoman 段树

    标题效果:有m点,每个点都有一个权值.现在我们有这个m为点的长度n该序列,寻求区间,它仅出现一次在正确的点区间内值和最大 想了很久,甚至神标题,奔说是水的问题--我醉了 枚举左点 对于每个请求留点右键 ...

  8. Cocos2d-x学习笔记(五岁以下儿童) 精灵两种方式播放动画

     这几天在看控件类,临时没有想好实际运用的方向.单纯的创建网上已经有非常多这方面的样例,我就不写了.接下来是学习精灵类.精灵类若是单独学习也是非常easy.于是我加了一些有关动画方面的知识点与精灵 ...

  9. logback与Spring、SpringMVC结合使用教程(转) logback good

    摘要:本文主要介绍了如何在spring.springMVC中使用logback 一.logback与Spirng结合使用 1.maven添加引用: <dependency> <gro ...

  10. zerglurker的c语言教程006——第一功能

    行,以往的经验教训后,.成员main性能.变数.命名等基本概念应该有一个初步的了解 下面,我们就可以开始我们自己的第一个定义的函数. 仿照头等舱.操作的第二个教训.添加一个新的项目的解决方案Lessi ...