1、设计思想:给SQLITE进行封装,利用定义的类别实现方法的简洁,以便达到低耦合效果

 控制器代码:
#import "ViewController.h"
#import "DatabaseHelper.h" @interface ViewController ()
{
sqlite3 *db;
}
@end @implementation ViewController -(void)loadView { [super loadView];
self.view.backgroundColor = [UIColor orangeColor];
}
- (void)viewDidLoad {
[super viewDidLoad];
//PART1:该部分为实现的帮助类别
//PART1 .1
[DatabaseHelper openDatabaseWithName:@"personinfo.sqlite" withSqlite:db];
//PART1 .2
24 db =[DatabaseHelper openDatabaseWithName:@"personinfo.sqlite" withSqlite:db];
NSLog(@" isOpenOrCreat = %@",db ?@"sucess":@"failure");
26
//PART2:用以判断数据库是否打开
if (db) { } //PART3:用以判断数据库是否打开
[DatabaseHelper execSql:@"CREATE TABLE IF NOT EXISTS PERSONINFO (ID INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, address TEXT)" withSqlite:db];

 操作类代码:
#import "DatabaseHelper.h" @implementation DatabaseHelper
+(sqlite3 *)openDatabaseWithName:(NSString *)name withSqlite:(sqlite3 *)sqlite3{
//PART5:
//1、获取Documents文件路径
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
//2、拼接要建立的数据库文件路径
NSString *databasePath = [documentsPath stringByAppendingPathComponent:name];
//打印
NSLog(@"databasePath = %@",databasePath);
//判断是否已经打开(打开失败时关闭数据库并log提示)
if (sqlite3_open([databasePath UTF8String], &sqlite3) != SQLITE_OK) {
sqlite3_close(sqlite3);
NSLog(@"数据库打开失败");
return nil ;
} //PART4:
// char *err;
// NSString *sql = @"CREATE TABLE IF NOT EXISTS PERSONINFO (ID INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, address TEXT)";
// if (sqlite3_exec(sqlite3, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
// sqlite3_close(sqlite3);
// NSLog(@"数据库操作数据失败!");
// NSLog(@"%s ",err);
// } return sqlite3;
} +(BOOL)execSql:(NSString *)sql withSqlite:(sqlite3 *)sqlite3{
char *err;
//sqlite3_exec(), 执行非查询的sql语句
if (sqlite3_exec(sqlite3, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
sqlite3_close(sqlite3);
NSLog(@"数据库操作数据失败!");
return NO;
}
return YES; }

问题:
1、当注掉PART1.1                          数据库可以被写入
2、当注掉PART1.1、PART4              后数据库不能被写入 
3、当注掉PART1.2、PART4              数据库可以被写入

结论:
1、句柄的存在必须依赖于上下文,数据库的操作必须依赖于句柄存在的内容。
2、只有句柄前后相对应才能实现对数据库的操作.
 
 
 

关于iOS中SQLITE句柄的使用的细节的更多相关文章

  1. iOS 中SQLite数据库操作

    在iOS中实现SQLite数据库的操作:1.导入框架(libsqlite3.0.tbd) 2.导入头文件<sqlite3.h> 3.实现数据的增删改查 实现简单 SQLite数据库操作 的 ...

  2. iOS中SQLite知识点总结1

    数据库(SQLite) 01-数据库简介 1.什么是数据库 数据库(Database)是按照数据结构来组织,存储和管理数据的仓库 2.数据库的分类 关系型数据库(主流) PC端:Oracle/MySQ ...

  3. iOS中SQLite知识点总结2

    数据库(SQLite) 01-多表查询 格式:select 字段1,字段2,... from 表名1,表名2; 别名:select 别名1.字段1 as 字段别名1,别名2.字段2 as 字段别名2, ...

  4. iOS中sqlite版本号

    https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS) https://github.com/y ...

  5. ios 中sqlite的用法

    #import <sqlite3.h> @interface ViewController () { sqlite3 *_sqldb; } @end @implementation Vie ...

  6. IOS学习:ios中的数据持久化初级(文件、xml、json、sqlite、CoreData)

    IOS学习:ios中的数据持久化初级(文件.xml.json.sqlite.CoreData) 分类: ios开发学习2013-05-30 10:03 2316人阅读 评论(2) 收藏 举报 iOSX ...

  7. ios中常见数据存储方式以及SQLite常用的语句

    在iOS中,根据不同的需求对应的有多种数据存储方式: 1.NSUserdefaults  将数据存储到沙盒中(library),方便易用,但是只能存储系统提供的数据类型(plist),不能存储自定义的 ...

  8. QF——iOS中的数据库操作:SQLite数据库,第三方封装库FMDB,CoreData

    SQLite数据库: SQLite是轻量级的数据库,适合应用在移动设备和小型设备上,它的优点是轻量,可移植性强.但它的缺点是它的API是用C写的,不是面向对象的.整体来说,操作起来比较麻烦.所以,一般 ...

  9. 在IOS中使用DES算法对Sqlite数据库进行内容加密存储并读取解密

    在IOS中使用DES算法对Sqlite 数据库进行内容加密存储并读取解密 涉及知识点: 1.DES加密算法: 2.OC对Sqlite数据库的读写: 3.IOS APP文件存储的两种方式及读取方式. 以 ...

随机推荐

  1. 支付标记化(Tokenization)技术

    道客巴巴->支付标记化(Tokenization)技术介绍 百度文库->中国银联支付标记化技术指引 NFC产业网->银联技术专家解答支付标记化Token技术 百度搜索->Tok ...

  2. Foreman--管理PuppetClient

    一. 环境: 1. server: puppetmaster+activemq+foreman1.3 server1.xxx.com(10.8.1.201) 2. client: fedora 19 ...

  3. 几款JS地图插件比较

    因工作需要,最近研究几款关于地图的JS插件,现与大家分享一下. 以下比较只是浅层次的分析一下,并没有实际通过项目检验,所以不足之处还请大家指出. 地图插件对比 插件名  简介 区域支持 扩展性 离线支 ...

  4. 【 随笔 】 D3 难吗?

    有不少朋友说学 D3 挺难的.为什么呢?想写一篇文章分析分析. 1. D3 出现的背景 D3.js 是 Github 上的一个开源项目,用于数据可视化.作者是 Mike Bostock,纽约时报的工程 ...

  5. CentOS 7 安装 mariaDB

    1.安装数据库 [root@localhost ~]# yum -y  install mariadb-server mariadb mariadb-devel 2.启动数据库[root@localh ...

  6. listview使用总结

    1. android给listview的item设定高度 原文网址:http://blog.csdn.net/l_serein/article/details/7403992 在item的layout ...

  7. [selenium webdriver Java]显示的等待同步

    显示等待可以在执行下一次操作时,自定义等待条件 显示的等待只需要执行在需要同步的地方而不影响脚本的其他地方 Selenium WebDriver提供了WebDriverWait和ExpectedCon ...

  8. GCC 编译命令

    今天突然被同事问道一个GCC编译命令为的问题,感觉对相应内容生疏了,赶紧整理下相关内容,梳理下相关知识. GCC命令提供了非常多的命令选项,但并不是所有都要熟悉,初学时掌握几个常用的就可以了,到后面再 ...

  9. js,css压缩工具

    常见的js压缩工具: js commpress: 运行平台:windows系统, 优点:能自动压缩: 缺点:不能拖动文件压缩:只支持windows平台: s.press 运行平台:mac ox系统 优 ...

  10. [原]Java面试题-输入一个整型数组,找出最大值、最小值,并交换。

    [Date]2013-09-19 [Author]wintys (wintys@gmail.com) http://wintys.cnblogs.com [Content]: 1.面试题 输入一个整型 ...