IOS sqlite 基础

1,导入libsqlite3.0.dylib库

文件中:#import"sqlite3.h"

2,创建数据库

#define kDocDir [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]

#define dbPath [kDocDir stringByAppendingPathComponent:@"test.db"]

sqlite3 *db;

if (sqlite3_open([dbPathUTF8String], &db) !=
SQLITE_OK) {

sqlite3_close(db);

NSAssert(0,@"数据库打开失败。");

return;

}

3,创建表table1, 三个不同类型的字段id是整形,name是字符串,image是二进制

char *sqlStr ="CREATE TABLE table1 (id integer, name text, image blob)";

sqlite3_stmt *statement;

if(sqlite3_prepare_v2(db, sqlStr, -1, &statement,nil) !=
SQLITE_OK) {

NSLog(@"Error: failed to prepare statement:create table1");

return;

}

int success = sqlite3_step(statement);

sqlite3_finalize(statement);

if ( success != SQLITE_DONE) {

NSLog(@"Error: failed to dehydrate:CREATE TABLEtable1");

return;

}

4,插入数据,注意问号的个数要和参数匹配

int idvalue=1;

NSString *namevalue=@"value";

UIImage *image=[UIImageimageNamed:@"test.png"];

sqlStr = "INSERT INTO
table1 VALUES(?,?,?)";

int success =
sqlite3_prepare_v2(db, sqlStr, -1, &statement,NULL);

if (success != SQLITE_OK) {

NSLog(@"Error: failed to insert into table1");

}

sqlite3_bind_int(statement,
1, [idvalueintegerValue]);//第二个参数从1开始,与后面查询数据的时候有区别

sqlite3_bind_text(statement,
2, [namevalueUTF8String], -1,SQLITE_TRANSIENT);

sqlite3_bind_blob(statement,
3, [imagebytes], (int)[imagelength],
SQLITE_TRANSIENT);

success = sqlite3_step(statement);

sqlite3_finalize(statement);

if (success == SQLITE_ERROR) {

NSLog(@"Error: failed to insert into the database with message.");

return;

}

5, 查询数据

sqlStr = "SELECT * FROM
table1";

if (sqlite3_prepare_v2(db, sqlStr, -1, &statement,NULL) !=
SQLITE_OK) {

NSLog(@"Error: failed to prepare statement with message:gettable1.");

return;

}

//查询结果集中一条一条的遍历所有的记录,这里的数字对应的是列值。

while (sqlite3_step(statement) ==SQLITE_ROW) {

int tempint=sqlite3_column_int(statement, 0);//这里要从0开始,注意与插入的时候序号的区别

char *temp=(char *)sqlite3_column_text(statement, 1);

NSString *tempstr=temp?[NSString stringWithUTF8String:temp]:@"";

int length=sqlite3_column_bytes(statement,2);//获取到二进制的数据的长度

Byte* bytes=(Byte*)sqlite3_column_blob(statement,2);

NSData *data=[NSDatadataWithBytes:bytes
length:length];

}

6,关闭数据库

sqlite3_close(db);

时间: 2024-11-17 11:32:19

IOS sqlite 基础的相关文章

SQLite 基础简介

什么是SQLite ? -> SQLite简介 SQLite 是一个进程内的库,是一种轻量级的.自给自足的.无服务器的.无需配置的,事务性的SQL数据库引擎.和他其他的数据库一样,SQLite引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接.SQLite可以直接访问其存储文件. SQLite 是一个开源的嵌入式关系数据库. 其特点是高度便携.使用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下 - 只要确保SQLite的二进制

SQLite 基础介绍

1.什么是SQLite ? -> SQLite简介 SQLite 是一个进程内的库,是一种轻量级的.自给自足的.无服务器的.无需配置的,事务性的SQL数据库引擎.和他其他的数据库一样,SQLite引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接.SQLite可以直接访问其存储文件. SQLite 是一个开源的嵌入式关系数据库. 其特点是高度便携.使用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下 - 只要确保SQLite的二

iOS开发-基础面试题(一) 分类: 面试题

iOS开发-基础面试题(一) 1.Difference between shallow copy and deep copy??浅复制和深复制的区别?? 答:浅层复制:只复制指向对象的指针,而不复制引用对象本身.?深层复制:复制引用对象本身.?意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源?还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们

iOS开发基础知识--碎片32

 iOS开发基础知识--碎片32 1:动画属性UIViewAnimationOptions说明 a:常规动画属性设置(可以同时选择多个进行设置) UIViewAnimationOptionLayoutSubviews:动画过程中保证子视图跟随运动. UIViewAnimationOptionAllowUserInteraction:动画过程中允许用户交互. UIViewAnimationOptionBeginFromCurrentState:所有视图从当前状态开始运行. UIViewAnimat

iOS开发基础知识--碎片1

iOS开发基础知识--碎片1  一:NSString与NSInteger的互换 NSInteger转化NSString类型:[NSString stringWithFormat: @"%d", NSInteger]; NSString转化 NSInteger类型:NSInteger = [NSString intValue]; *其它几个同理 [NSString boolValue].[NSString floatValue].[NSString doubleValue] 二:Obje

iOS开发基础知识--碎片3

iOS开发基础知识--碎片3  iOS开发基础知识--碎片3 十二:判断设备 //设备名称 return [UIDevice currentDevice].name; //设备型号,只可得到是何设备,无法得到是第几代设备 return [UIDevice currentDevice].model; //系统版本型号,如iPhone OS return [UIDevice currentDevice].systemVersion; //系统版本名称,如6.1.3 return [UIDevice

iOS开发基础知识--碎片2

iOS开发基础知识--碎片2 六:获得另一个控件器,并实现跳转 UIStoryboard* mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; UIViewController *registerViewController = [mainStoryboard instantiateViewControllerWithIdentifier:@"registerView

iOS系列 基础篇 08 文本与键盘

iOS系列 基础篇 08 文本与键盘 目录: 1. 扯扯犊子 2. TextField 3. TextView 4. 键盘的打开和关闭 5. 打开/关闭键盘的通知 6. 键盘的种类 7. 最后再扯两句 1. 扯扯犊子 与Label一样,TextField和TextView也是文本类控件,是可以编辑文本内容的. 在控件内容编辑方面,三者都可以通过代码.双击该控件和属性检查器中的Text属性来实现,但是TextField和TextView比Label多了一个键盘的使用. 另外,TextField和T

iOS系列 基础篇 03 探究应用生命周期

iOS系列 基础篇 03 探究应用生命周期 目录: 1. 非运行状态 - 应用启动场景 2. 点击Home键 - 应用退出场景 3. 挂起重新运行场景 4. 内存清除 - 应用终止场景 5. 结尾 本篇主要探讨的是iOS应用中各种状态的跃迁过程,建议大家通过修改AppDelegate.swift,在每个过程中添加日志输出代码,从而观察其变化. 作为应用程序的委托对象,AppDelegate类在应用程序生命周期的不同阶段会回调不同的方法. 首先,咱们先来了解一下iOS应用的不同状态和他们之间的关系