关于iOS中SQLITE句柄的使用的细节

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

 1 控制器代码:
 2 #import "ViewController.h"
 3 #import "DatabaseHelper.h"
 4
 5 @interface ViewController ()
 6 {
 7      sqlite3 *db;
 8 }
 9 @end
10
11 @implementation ViewController
12
13 -(void)loadView {
14
15     [super loadView];
16     self.view.backgroundColor = [UIColor orangeColor];
17 }
18 - (void)viewDidLoad {
19     [super viewDidLoad];
20     //PART1:该部分为实现的帮助类别
21     //PART1 .1
22   [DatabaseHelper openDatabaseWithName:@"personinfo.sqlite" withSqlite:db];
23     //PART1 .2
24    db =[DatabaseHelper openDatabaseWithName:@"personinfo.sqlite" withSqlite:db]; 25 NSLog(@" isOpenOrCreat = %@",db ?@"sucess":@"failure");2627 //PART2:用以判断数据库是否打开28 if (db) {29 30  } 31 32 //PART3:用以判断数据库是否打开 33 [DatabaseHelper execSql:@"CREATE TABLE IF NOT EXISTS PERSONINFO (ID INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, address TEXT)" withSqlite:db];

 1 操作类代码:
 2 #import "DatabaseHelper.h"
 3
 4 @implementation DatabaseHelper
 5 +(sqlite3 *)openDatabaseWithName:(NSString *)name  withSqlite:(sqlite3 *)sqlite3{
 6     //PART5:
 7     //1、获取Documents文件路径
 8     NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
 9     //2、拼接要建立的数据库文件路径
10     NSString *databasePath = [documentsPath stringByAppendingPathComponent:name];
11     //打印
12     NSLog(@"databasePath = %@",databasePath);
13     //判断是否已经打开(打开失败时关闭数据库并log提示)
14     if (sqlite3_open([databasePath UTF8String], &sqlite3) != SQLITE_OK) {
15         sqlite3_close(sqlite3);
16         NSLog(@"数据库打开失败");
17         return nil ;
18     }
19
20 //PART4:
21 //    char *err;
22 //    NSString *sql = @"CREATE TABLE IF NOT EXISTS PERSONINFO (ID INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, address TEXT)";
23 //    if (sqlite3_exec(sqlite3, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
24 //        sqlite3_close(sqlite3);
25 //        NSLog(@"数据库操作数据失败!");
26 //        NSLog(@"%s ",err);
27 //    }
28
29     return  sqlite3;
30 }
31
32 +(BOOL)execSql:(NSString *)sql  withSqlite:(sqlite3 *)sqlite3{
33     char *err;
34     //sqlite3_exec(),   执行非查询的sql语句
35     if (sqlite3_exec(sqlite3, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
36         sqlite3_close(sqlite3);
37         NSLog(@"数据库操作数据失败!");
38         return NO;
39     }
40     return YES;
41
42 }


问题:

1、当注掉PART1.1                          数据库可以被写入

2、当注掉PART1.1、PART4              后数据库不能被写入

3、当注掉PART1.2、PART4              数据库可以被写入



结论:

1、句柄的存在必须依赖于上下文,数据库的操作必须依赖于句柄存在的内容。

2、只有句柄前后相对应才能实现对数据库的操作.

时间: 2024-11-08 22:16:42

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

iOS 中SQLite数据库操作

在iOS中实现SQLite数据库的操作:1.导入框架(libsqlite3.0.tbd) 2.导入头文件<sqlite3.h> 3.实现数据的增删改查 实现简单 SQLite数据库操作 的 demo 具体过程: 1.创建名为 SQLite_Manage 的.h .m 文件,导入头文件 <sqlite3.h> 2.数据库在一个app中只有一个,使用单例模式:(代码如下) 1 + (SQLite_Manager *)sharedManager{ 2 static SQLite_Mana

iOS中SQLite的使用

今天终于花了点时间把之前项目中使用到的对SQLite操作的方法整理一下并上传到github上,下载地址:(https://github.com/peanutNote/QYSQLiteManagerDemo.git). 与其他第三方目的一样,主要是为了使代码中有关对SQLite操作简单化,具体用法: 将QYSQLiteManager文件add到项目中,并在需要对SQLite进行操作的类中添加#import "QYSQLiteManager" . // 插入语句 - (void)inser

iOS中sqlite和coreData的区别

sqlite和coreData的区别: 1.sqlite数据库的操作流程: 创建数据库,再通过定义一些字段来定义表格结构,可以利用sql语句向表格中插入记录,删除记录,修改记录,表格之间也可以建联系. sqlite和coreData的类做个对应: 表结构--------NSEntityDescription(菜单详情) 数据库中所有的表格和他们的联系--------NSmanagedObjectModel(菜谱) 数据库存放方式---------NSPersistentStoreCoordina

IOS中sqlite数据库利用bold类型存储与读取字典

我在做app收藏时, 发现我的数据有的是字典, 字典怎么向数据库中保存呢? 就看了好多博客, 字典应该利用数据库中的bold类型来保存,可是添加到数据库之后,读取不出来, 为此伤透了脑筋,为了解决这个问题, 花费了好时间. 以前认为bold类型就是用来存放二进制的,可以存放图片等, 而我的数据存到数据库中的确是二进制,所以读的时候全是二进制, 以致不能转换成字典.后来发现我保存数据的方法就是错的, bold类型不仅可以放二进制也可以放数据,简直颠覆了我对bold类型的看法,BLOB,只是一个数据

iOS中sqlite版本号

https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS) https://github.com/yapstudios/YapDatabase/blob/master/YapDatabase/YapDatabase.m ? ? + (NSString *)sqliteVersionUsing:(sqlite3 *)aDb { sqlite3_stmt *statement; int status

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

IOS学习:ios中的数据持久化初级(文件.xml.json.sqlite.CoreData) 分类: ios开发学习2013-05-30 10:03 2316人阅读 评论(2) 收藏 举报 iOSXMLJSONSQLiteCoreData 一.文件操作 1.因为应用是在沙盒(Sandbox)中的,在文件读写权限上受到限制,只能在几个目录下读写文件: * Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录 * tmp:存放临时文件,iTunes不会备份和恢复

IOS中数据存储 sqlite3 的应用, 知识点: 数据库句柄 , 单例模式运用, Services服务层,sqlite3_open, sqlite3_exec, sqlite3_prepare_v2,sqlite3_step等等

相比于服务器端的数据存储,IOS中几种数据存储的技术: (1)XML属性列表 -- PList (2)NSKeyedArchiver 归档 (3)Preference(偏好设置) (4)SQLite3 (5)Core Data(以面向对象的方式操作数据库SQLite) 发现用数据库进行数据的存储和缓存,才是王道, 比较有心得的体会:虽然通过文件的方式进行存储,读写速度相对数据库存储较快,但是涉及大批量的数据时,在查询/管理/优化方面,数据库的优势明显会更大些.而且作为移动端,SQLite数据库在

数据库sqlite3的使用-ios中引用方法

一.简单说明 在iOS中使用SQLite3,首先要添加库文件libsqlite3.dylib和导入主头文件. 导入头文件,可以使用库中的函数(是纯C语言的) 二.具体说明 新建一个项目,在项目的主界面中放四个按钮(分别是,增加.删除.修改.查询). 1.sqlite3_open(<#const char *filename#>, <#sqlite3 **ppDb#>)函数的一些说明: (1)作用:把一个文件名称传递给他,它会自动检测这个文件是否存在,如果不存在的话,会自动创建相应的

iOS中多线程原理与runloop介绍

http://mobile.51cto.com/iphone-403490.htm iOS中多线程原理与runloop介绍 iPhone中的线程应用并不是无节制的,官方给出的资料显示iPhone OS下的主线程的堆栈大小是1M,第二个线程开始都是512KB.并且该值不能通过编译器开关或线程API函数来更改.只有主线程有直接修改UI的能力.……>>详细 兄弟专题:iOS人机交互指南之UI设计基础 1 iOS多线程编程知多少 在iOS的世界里有两种实现多线程的方式: 多线程是一个比较轻量级的方法来