/*
# Sqlite3## 创建数据库方法
## 一、终端命令进入到 /Users/wushumin/Documents/Sqlite 文件夹下。
> cd Documents/Sqlite     创建 student数据库
> sqlite3 student.db PS:sqlite3 终端常用命令.help 查看帮助.tables 查看数据库中所有的表.schema 查看数据库中表的创建语句.schema tablename 查看某个表的创建语句.header on/off 打开或者关闭表头(是否显示字段).exit 或者 .quit 退出。### 通过sql语句对表进行操作#### 表相关操作**创建表**
> sqlite> CREATE TABLE userInfo (uid INTEGER PRIMARY KEY NOT NULL, username TEXT, pwd TEXT);***>CREATE TABLE "studentInfo" ("uid" INTEGER PRIMARY KEY NOT NULL AUTO , "username" TEXT, "pwd" TEXT );创建数据库表的语法格式:
CREATE TABLE `tableName` (
`ID` INTEGER PRIMERY KEY NOT NULL,  // 主键,因为在OC 中 id 与关键字 id 冲突,因此一般不建议使用 id 作为主键名。  INTEGER 整数类型。
)  *注意: sql 中语法大小写都可以识别。但是表名 和 字段名 严格区分大小写。 sql 语句必须 以 `;` 结尾,表示一条语句的结束。
*注意: 如果 在sqlite状态下,不输入`;` 分号,则认为该sql语句没有结束。此时输入分号,敲下回车即可。**删除表**
> drop table userInfo;    #### 表内容相关操作**表插入数据**> sqlite> insert into "studentInfo" values(1,'wushumin','男',18);这里数据表名 加不加引号都可以. 也可以写成 insert into studentInfo    **表查询数据**> sqlite> select * from studentInfo;
> 1|wushumin|男|18`*`  表示查询所有数据。**表更新数据**> sqlite> update studentInfo set name = '吴书敏' where sid = 1;格式:    update `tablename` set `column` = `newValue` (where `aColumn` = `aValue`);    where 子句 用来设定判断条件。 把sid = 1 行的name值改为 吴书敏。    **表删除数据**   > sqlite> delete from studentInfo where sid = 1;如果不设置 where条件子句,会删除此表中的所有数据。    ###############################################
#练习***
##创建表
sqlite> create table "studentInfo" ("uid" integer primary key not null , "username" text, "pwd" text);
##表插入数据
sqlite> insert into "studentInfo" values(10, 'wsm', '666');
##查询所有数据
sqlite> .header on
sqlite> select * from studentInfo;
##查询具体数据
sqlite> select * from "studentInfo" where uid = 11;
##更新数据
sqlite> update "studentInfo" set username = '王腾飞' where uid = 11;
#删除数据  如果不设置 where条件子句,会删除此表中的所有数据。
sqlite> delete from "studentInfo" where uid = 11;*///
//  AppDelegate.h
//  UI19_SQLite
//
//  Created by l on 15/9/25.
//  Copyright (c) 2015年 . All rights reserved.
//#import <UIKit/UIKit.h>@interface AppDelegate : UIResponder <UIApplicationDelegate>@property (strong, nonatomic) UIWindow *window;@end//
//  AppDelegate.m
//  UI19_SQLite
//
//  Created by l on 15/9/25.
//  Copyright (c) 2015年 . All rights reserved.
//#import "AppDelegate.h"@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch.//sqlite 在iOS 开发中的运用//1.导入sqlite框架 libsqlite3//2.导入头文件<sqlite3.h>//3.数据库相关操作//*****************************************************///* UI19 数据库SQL语句创建修改删除表的操作iOS 为移动开发,这决定了iOS的数据库要 即精巧而数据能力又不能太差。SQLite 为嵌入式数据库。1. 支持事件,不需要配置,不需要安装,不需要管理员。2. 支持大部分sql (struct query language) 数据库查询语句3. 可以跨平台使用,最大2t。4. 系统精巧,占用容量小。5. api 使用简单。// sqlite 语法入门1. 数据类型  和 存储特点sqlite 采用的是动态数据类型。 划分为以下几种数据类型NULL 该值为NULL 空值。INTEGER 有符号整数型。REAL 浮点型TEXT 文本字符串,存储使用的编码方式为UTF-8 ,UTF-16BE , UTF-6LE 等。// 存储特点 动态类型sqlite 采用的是动态数据类型。 传统的关系数据库使用的是静态数据类型-》表声明时的字段类型为字段存储的数据类型。sqlite 而言,即便在声明时确定了类型,我们仍然可以存储其他类型。这是由于它的类型亲缘性决定的。可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。例如: sqlite 存储类别 可以包含6中不同长度的interger类型,但是一旦被读到内存中都会被认为是占用8个字节的无符号整形。// 注意: 尽管SQLite为我们提供了这种方便,但是一旦考虑到数据库平台的可移植性问题,我们在实际的开发中还是应该尽可能的保证数据类型的存储和声明的一致性。为了和 其他数据库 数据类型兼容, sqlite 具有数据亲缘性 ,可以理解为 把你所给的类型 自动转换为它的数据类型。例如: 声明的时候字段类型为INT , INTEGER , 或者 SMALLINT  等  统一为  INTERER例如给// 目前支持一下五种亲缘类型:interger  整形real   浮点型text   文本类型 或者文本与数字组合(65535个字符)numeric字段的亲缘性是根据该字段在声明时被定义的类型来决定的,具体的规则可以参照以下列表。需要注意的是以下列表的顺序,即如果某一字段类型同时符合两种亲缘性,那么排在前面的规则将先产生作用。1). 如果类型字符串中包含"INT",那么该字段的亲缘类型是INTEGER。2). 如果类型字符串中包含"CHAR"、"CLOB"或"TEXT",那么该字段的亲缘类型是TEXT,如VARCHAR。3). 如果类型字符串中包含"BLOB",那么该字段的亲缘类型是NONE。4). 如果类型字符串中包含"REAL"、"FLOA"或"DOUB",那么该字段的亲缘类型是REAL。5). 其余情况下,字段的亲缘类型为NUMERIC。INTINTEGERTINYINTSMALLINTMEDIUMINTBIGINT                  INTEGER        1UNSIGNED BIG INTINT2INT8CHARACTER(20)VARCHAR(255)VARYING CHARACTER(255)   TEXT            2NCHAR(55)NATIVE CHARACTER(70)NVARCHAR(100)TEXTCLOB  (字符大对象,保存大量基于字符的数据)BLOB  (二进制大对象,保存图片,视频,音乐等)   none    3NULLREALDOUBLEDOUBLE PRECISION     REAL              4FLOATNUMERICDECIMAL(10,5)   numeric(进而转化为其他类型)           5BOOLEANDATEDATETIME当文本数据被插入到亲缘性为NUMERIC的字段中时,如果转换操作不会导致数据信息丢失以及完全可逆,那么SQLite就会将该文本数据转换为INTEGER或REAL类型的数据,如果转换失败,SQLite仍会以TEXT方式存储该数据。对于NULL或BLOB类型的新数据,SQLite将不做任何转换,直接以NULL或BLOB的方式存储该数据。需要额外说明的是,对于浮点格式的常量文本,如"30000.0",如果该值可以转换为INTEGER同时又不会丢失数值信息,那么SQLite就会将其转换为INTEGER的存储方式。注意: 不建议把大文件存在SQL 里面,DB文件变大则效率下降。 可以把大数据放在沙盒文件夹里面,数据库里面记录相应的路径。// 开始使用SQLite// 1. 导入框架 libsqlite3.0.dylib// 2. 引入<sqlite3.h>// 3. 打开数据库// 4. 执行sql语句// 5. 关闭数据库*/return YES;
}@end/////
//  DataBaseHandle.h
//  UI19_SQLite
//
//  Created by l on 15/9/25.
//  Copyright (c) 2015年 . All rights reserved.
//  此为数据库操作类,为单例类.
//  主要功能:数据库的打开和关闭,数据库的添加, 删除, 修改, 查询操作.#import <Foundation/Foundation.h>
#import <sqlite3.h>//导入sqlite3 头文件
#import "Student.h"@interface DataBaseHandle : NSObject// 打开数据库
+ (sqlite3 *)open;// 关闭数据库
+ (void)close;// 添加数据
+ (BOOL)insertStudent:(Student *)student;// 删除数据
+ (BOOL)deleteStudent:(Student *)student;// 更改数据 -> 更改密码
+ (BOOL)updateStudent:(Student *)student pwd:(NSString *)pwd;// 查询某一数据
+ (Student *)findStudentByUID:(NSInteger)uid;// 查询所有数据
+ (NSArray *)findAllStudents;@end//
//  DataBaseHandle.m
//  UI19_SQLite
//
//  Created by l on 15/9/25.
//  Copyright (c) 2015年 . All rights reserved.
//#import "DataBaseHandle.h"#define KDBName @"SHS150711.sqlite"//数据库指针(对象)
static sqlite3 *db = nil;@implementation DataBaseHandle//打开数据库
+ (sqlite3 *)open{@synchronized(self){//打开过了直接返回if (db != nil) {return db;}else{//数据库路径  //数据库对象地址,通过地址改值,返回一个打开的数据库//1. 数据库路径//注意: 数据库是备份的数据,需要备份的数据都是存放在沙盒的Documents里面.NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];NSString *dbPath = [documentsPath stringByAppendingPathComponent:KDBName];//2.打开数据库//创建并且打开数据库,如果没有该数据库会自动创建并且打开int result = sqlite3_open(dbPath.UTF8String, &db);//该函数的作用是打开路径数据库,并且给db赋值//3.判断数据库是否打开,如果打开,则创建数据库表if (result == SQLITE_OK) {//4.sql语句NSString *sqlString = @"CREATE TABLE 'studentInfo' ('uid' INTEGER PRIMARY KEY NOT NULL, 'username' TEXT, 'pwd' TEXT)";//5.执行sql语句// sqlite3 执行函数// db 数据库指针// sql sql语句 c字符串// 回调函数, 查询时使用// 作用: 数据库db执行sqlString语句, 并返回执行结果, int型.int result2 = sqlite3_exec(db, sqlString.UTF8String, nil, nil, nil);if (result2 == SQLITE_OK) {NSLog(@"%s %d %@", __FUNCTION__, __LINE__, @"表创建成功");}else{NSLog(@"%s %d %@", __FUNCTION__, __LINE__, @"表创建失败, 或者已经创建过了");}}// if 结果return db;                                                  }// else 结果}// sync 结束
}//关闭数据库
+ (void)close{int result = sqlite3_close(db);if (result == SQLITE_OK) {NSLog(@"%s %d %@", __FUNCTION__, __LINE__, @"数据库关闭");}
}//添加数据
+ (BOOL)insertStudent:(Student *)student{BOOL isSuccess = NO;//1.数据库对象sqlite3 *db = [self open];//2.sql 语句NSString *sqlString = [NSString stringWithFormat:@"INSERT INTO 'studentInfo' values(%ld, '%@', '%@')", student.uid, student.username, student.pwd];//3. 执行execint result = sqlite3_exec(db, sqlString.UTF8String, nil, nil, nil);if (result == SQLITE_OK) {NSLog(@"%s %d %@", __FUNCTION__, __LINE__, @"数据插入成功");isSuccess = YES;}else{NSLog(@"%s %d %@", __FUNCTION__, __LINE__, @"数据插入失败");}return isSuccess;
}//删除数据
+ (BOOL)deleteStudent:(Student *)student{BOOL isSuccess = NO;//1. 数据库对象sqlite3 *db = [self open];//2.sql 语句NSString *sqlString = [NSString stringWithFormat:@"DELETE FROM 'studentInfo' WHERE uid = %ld", student.uid];//3.执行int result = sqlite3_exec(db, sqlString.UTF8String, nil, nil, nil);if (result == SQLITE_OK) {NSLog(@"%s %d %@", __FUNCTION__, __LINE__, @"数据删除成功");isSuccess = YES;}else{NSLog(@"%s %d %@", __FUNCTION__, __LINE__, @"数据删除失败");}return isSuccess;
}//更改数据 更改密码
+ (BOOL)updateStudent:(Student *)student pwd:(NSString *)pwd{BOOL isSuccess = NO;//1.dbsqlite3 *db = [self open];//2.sqlStringNSString *sqlString = [NSString stringWithFormat:@"UPDATE 'studentInfo' set pwd = '%@' WHERE uid = %ld", pwd, student.uid];NSLog(@"%@", sqlString);//3.execint result = sqlite3_exec(db, sqlString.UTF8String, nil, nil, nil);if (result == SQLITE_OK) {NSLog(@"%s %d %@", __FUNCTION__, __LINE__, @"数据更新成功");isSuccess = YES;}else{NSLog(@"%s %d %@", __FUNCTION__, __LINE__, @"数据更新失败");}return isSuccess;
}//查询某一数据
+ (Student *)findStudentByUID:(NSInteger)uid{Student *student = nil; //创建返回对象//1.db对象sqlite3 *db = [self open];//2.sql语句NSString *sqlString = [NSString stringWithFormat:@"SELECT * FROM 'studentInfo' WHERE uid = %ld", uid];//3.创建stmt  statement 语句对象sqlite3_stmt *stmt = nil; //作用:执行sql语句//4.预执行, 查看有无语法错误,给stmt赋值sql语句//sqlite3_prepare_v2()//db 数据库对象//sql 语句//-1 语句执行长度, -1 为全部长度//@stmt 语句对象地址,如果预执行正确则赋值给stmt sql语句//nil 没有执行的sql语句,一般给nilint result = sqlite3_prepare_v2(db, sqlString.UTF8String, -1, &stmt, nil);//5.判断, 如果预执行成功, 6.执行相关的操作if (result == SQLITE_OK) {//6.执行 sqlite3_step(stmt), 执行函数有返回值,如果是插入,删除,更新,返回值为SQLITE_DOWN, 如果是查找操作,则会返回SQLITE_ROW,当前行并且指向下一行,直到没有值,返回SQLITE_DOWNif (sqlite3_step(stmt) == SQLITE_ROW) {//7.如果有值,则逐列取值,sqlite3_column_类型(stmt,列下标, 从0开始)//uid       username   pwd//integer   text       textNSInteger uid = sqlite3_column_int(stmt, 0);const unsigned char *cName = sqlite3_column_text(stmt, 1);//usernameNSString *username = [NSString stringWithUTF8String:(const char*)cName];//pwdNSString *pwd = [NSString stringWithUTF8String:(const char*)sqlite3_column_text(stmt, 2)];student  = [[Student alloc] initWithUID:uid username:username pwd:pwd];}//if step 结束}//if result 结束//8.释放stmt 语句对象,最后都要释放,不管执行是否正确sqlite3_finalize(stmt);if (student == nil) {NSLog(@"%s %d %@", __FUNCTION__, __LINE__, @"查找失败");}else {NSLog(@"%s %d %@", __FUNCTION__, __LINE__, @"查找成功");}return student;
}//查询所有数据
+ (NSArray *)findAllStudents{//返回值可变数组NSMutableArray *studentArr = [NSMutableArray array];//1.dbsqlite3 *db = [self open];//2.sqlNSString *sqlString = @"SELECT *  FROM 'studentInfo'; ";//3.stmtsqlite3_stmt *stmt = nil;//4.prepare_v2int result = sqlite3_prepare_v2(db, sqlString.UTF8String, -1, &stmt, nil);//5.判断if (result == SQLITE_OK) {//6.执行查询多条记录,需要用while语句// == row 说明有值,则取值while (sqlite3_step(stmt) == SQLITE_ROW) {//7.逐列取值//uidNSInteger uid = sqlite3_column_int(stmt, 0);//usernameNSString *username = [NSString stringWithUTF8String:(const char*)sqlite3_column_text(stmt, 1)];//pwdNSString *pwd = [NSString stringWithUTF8String:(const char*)sqlite3_column_text(stmt, 2)];Student *student = [[Student alloc] initWithUID:uid username:username pwd:pwd];[studentArr addObject:student];}//while 查询结束}//if prepare 结束//8.释放 finalizesqlite3_finalize(stmt);if (studentArr.count == 0) {NSLog(@"%s %d %@", __FUNCTION__, __LINE__, @"没有数据,或查找失败");}else {NSLog(@"%s %d %@", __FUNCTION__, __LINE__, @"查找成功");}return studentArr;}@end//
//  ViewController.h
//  UI19_SQLite
//
//  Created by l on 15/9/25.
//  Copyright (c) 2015年 . All rights reserved.
//#import <UIKit/UIKit.h>@interface ViewController : UIViewController@end//
//  ViewController.m
//  UI19_SQLite
//
//  Created by l on 15/9/25.
//  Copyright (c) 2015年 . All rights reserved.
//#import "ViewController.h"
#import "DataBaseHandle.h"
#import "Student.h"
@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];//沙盒路径NSLog(@"%@", NSHomeDirectory());// 打开数据库[DataBaseHandle open];//关闭数据库
//    [DataBaseHandle close];//插入数据Student *stu1 = [[Student alloc] initWithUID:1 username:@"印磊" pwd:@"王右"];[DataBaseHandle insertStudent:stu1];//删除数据
//    [DataBaseHandle deleteStudent:stu1];//更新数据
//    [DataBaseHandle updateStudent:stu1 pwd:@"王左"];//查询某一数据Student *stu2 = [DataBaseHandle findStudentByUID:1];NSLog(@"%@", stu2.username);//查找所有数据NSArray *array = [DataBaseHandle findAllStudents];NSLog(@"%@", array);// Do any additional setup after loading the view, typically from a nib.
}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}@end///
//  Student.h
//  UI19_SQLite
//
//  Created by l on 15/9/25.
//  Copyright (c) 2015年 . All rights reserved.
//model类#import <Foundation/Foundation.h>@interface Student : NSObject@property (nonatomic, assign) NSInteger uid;@property (nonatomic, copy) NSString *username;@property (nonatomic, copy) NSString *pwd;//自定义初始化方法
- (instancetype)initWithUID:(NSInteger)uid username:(NSString *)username pwd:(NSString *)pwd;@end//
//  Student.m
//  UI19_SQLite
//
//  Created by l on 15/9/25.
//  Copyright (c) 2015年 . All rights reserved.
//#import "Student.h"@implementation Student- (instancetype)initWithUID:(NSInteger)uid username:(NSString *)username pwd:(NSString *)pwd{self = [super init];if (self) {self.uid = uid;self.username = username;self.pwd = pwd;}return self;
}@end

iOS编程------SQLite / 数据库相关推荐

  1. iOS - 使用 SQLite 数据库实现数据持久化

    前言 SQLite 是一款主流的嵌入式关系型数据库,它的主要特点是轻量级和跨平台,是当前很多嵌入式操作系统中数据库的首选. 数据库也是客户端开发中常用的一种数据持久化手段,本文主要介绍在客户端开发中常 ...

  2. iOS - Swift SQLite 数据库存储

    前言 采用 SQLite 数据库来存储数据.SQLite 作为一中小型数据库,应用 iOS 中,跟前三种保存方式相比,相对比较复杂一些. 注意:写入数据库,字符串可以采用 char 方式,而从数据库中 ...

  3. iOS - OC SQLite 数据库存储

    前言 采用 SQLite 数据库来存储数据.SQLite 作为一中小型数据库,应用 iOS 中,跟前三种保存方式相比,相对比较复杂一些. 注意:写入数据库,字符串可以采用 char 方式,而从数据库中 ...

  4. 使用iOS原生sqlite3框架对sqlite数据库进行操作

    摘要: iOS中sqlite3框架可以很好的对sqlite数据库进行支持,通过面向对象的封装,可以更易于开发者使用. 使用iOS原生sqlite3框架对sqlite数据库进行操作 一.引言 sqlit ...

  5. sqlite数据库插入和读取图片数据 (for ios)

    为什么80%的码农都做不了架构师?>>>    在iOS下用sqlite数据库存储图片,先把你的图片转换成 NSData 形式,然后在数据库添加一行 blob 数据 假定数据库中存在 ...

  6. Python可以这样学(第六季:SQLite数据库编程)-董付国-专题视频课程

    Python可以这样学(第六季:SQLite数据库编程)-1344人已学习 课程介绍         董付国老师系列教材<Python程序设计(第2版)>(ISBN:97873024365 ...

  7. Qt5 开发 iOS 应用之访问 SQLite 数据库

    开发环境: macOS 10.12.1 Xcode 8.1 Qt 5.8 iPhone 6S+iOS 10.1.1 源代码: 我在 Qt 程序里指定了数据库的名称来创建数据库,在 Win10.Andr ...

  8. 49.SQLite 数据库 编程

    在嵌入式设备的开发中,sqlite数据库是非常常用的,虽然听着很高大上,但是实际开发难度不是很大,主要对它的函数要使用熟练.那么它到底是一个什么东西? 一. 数据库基本概念 数据库是在数据库管理系统管 ...

  9. Android中Shared Preferences、Files、Network、SQLite数据库编程总结及示例

    Android数据存储 前言 Android中提供了4中数据存储方式.但是存储的这些数据都是私有的,要想在其他应用程序中使用这些数据.就需要使用ContentProvider(数据共享).下面是对4种 ...

最新文章

  1. python添加时间戳_Python 给某个文件名添加时间戳的方法
  2. libtorch 权重封装
  3. 【嵌入式开发】用 VLC 显示 树莓派摄像头 H264 裸流
  4. Vivo手机调试 logcat 信息一堆星号问题
  5. 类的继承私有成员问题
  6. Quick Cocos2dx 场景转换问题
  7. 我的docker随笔23:修改容器时区和添加中文支持
  8. cad的lisp程序大集合_大数据成神之路-Java高级特性增强(CopyOnWriteArraySet)
  9. 4.5管道实现机制和模拟构建管道「深入浅出ASP.NET Core系列」
  10. Poj2823 单调队列
  11. 基于uA741 PWM发生器
  12. 仿真软件proteus构建LCD1602四线驱动实验
  13. CAD中如何裁剪需要的区域
  14. 如何从ST官网下载STM32标准库
  15. 高频因子在股票中的表现
  16. vue实现某一区域滚动,头部底部固定,中间滚动
  17. 电脑视频转换成mp4格式,视频格式转换器转换
  18. CPU告急,EOS网络拥堵该如何解决?
  19. 学报格式和论文格式一样吗_学报论文格式要求
  20. c交叉编译成可执行文件在android上运行

热门文章

  1. [碎碎念]祝我的董小姐生日快乐~
  2. 假设你有8个球,其中一个略微重一些,但是找出这个球的唯一方法是将两个球放在天平上对比。最少要称多少次才能找出这个较重的球?
  3. 程序员常用的工具网站
  4. element表格样式优化
  5. sunyueonline.com最新SEO成果显著,百度百科收录“孙越”
  6. Linux下的桥接模式
  7. LDAP服务器不支持chap认证,终端使用EIA进行PEAP-GTC认证失败的原因分析
  8. Codeforces Round #708 (Div. 2)B. M-arrays
  9. 【DBC专题】-2-CAN Signal信号的Multiplexor多路复用在DBC中实现
  10. 图像处理中的 亮度, 灰度, 对比度等概念