ios对SQLite3的使用

ios对SQLite3的使用

一、在Firefox中打开sqlite3(如果没有,选择工具->附加组件,添加即可)新建sqlite3数据库,Contacts,

建立一个members表,字段 id,integer,主键,自增;name,varchar;email,varchar,null;birthday,datetime,null。

向表中添加一些数据:

二、新建Empty Appliation,添加一个HomeViewController,和一个组件libsqlite3.dylib,来支持对sqlite3的连接,关闭,增删改查等操作。

1. HomeViewController.h代码:

#import <UIKit/UIKit.h>

#import "sqlite3.h"

@interface HomeViewController : UIViewController{

sqlite3 *db; //声明一个sqlite3数据库

}

- (NSString *)filePath;//数据库文件的路径。一般在沙箱的Documents里边操作

@end

2. HomeViewController.m代码:

#import "HomeViewController.h"

@interface HomeViewController ()

@end

@implementation HomeViewController

//该方法用于返回数据库在Documents文件夹中的全路径信息

- (NSString *)filePath{

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDir = [paths objectAtIndex:0];

return [documentsDir stringByAppendingPathComponent:@"Contacts.sqlite"];

}

//打开数据库的方法

- (void)openDB{

if (sqlite3_open([[self filePath] UTF8String], &db) != SQLITE_OK) {

sqlite3_close(db);

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

}

}

//插入数据方法

- (void)insertRecordIntoTableName:(NSString *)tableName

withField1:(NSString *)field1 field1Value:(NSString *)field1Value

andField2:(NSString *)field2 field2Value:(NSString *)field2Value

andField3:(NSString *)field3 field3Value:(NSString *)field3Value{

/*方法1:经典方法

NSString *sql = [NSString stringWithFormat:@"INSERT INTO ‘%@‘ (‘%@‘, ‘%@‘, ‘%@‘) VALUES(‘%@‘, ‘%@‘, ‘%@‘)", tableName, field1, field2, field3, field1Value, field2Value, field3Value];

char *err;

if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {

sqlite3_close(db);

NSAssert(0, @"插入数据错误!");

}

*/

//方法2:变量的绑定方法

NSString *sql = [NSString stringWithFormat:@"INSERT INTO ‘%@‘ (‘%@‘, ‘%@‘, ‘%@‘) VALUES (?, ?, ?)",tableName, field1, field2, field3];

sqlite3_stmt *statement;

if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil) == SQLITE_OK) {

sqlite3_bind_text(statement, 1, [field1Value UTF8String], -1,NULL);

sqlite3_bind_text(statement, 2, [field2Value UTF8String], -1,NULL);

sqlite3_bind_text(statement, 3, [field3Value UTF8String], -1,NULL);

}

if (sqlite3_step(statement) != SQLITE_DONE) {

NSAssert(0, @"插入数据失败!");

sqlite3_finalize(statement);

}

}

//查询数据

- (void)getAllContacts{

NSString *sql = @"SELECT * FROM members";

sqlite3_stmt *statement;

if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil) == SQLITE_OK) {

while (sqlite3_step(statement) == SQLITE_ROW) {

char *name = (char *)sqlite3_column_text(statement, 0);

NSString *nameStr = [[NSString alloc] initWithUTF8String:name];

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

NSString *emailStr = [[NSString alloc] initWithUTF8String:email];

char *birthday = (char *)sqlite3_column_text(statement, 2);

NSString *birthdayStr = [[NSString alloc] initWithUTF8String:birthday];

NSString *info = [[NSString alloc] initWithFormat:@"%@ - %@ - %@",

nameStr, emailStr, birthdayStr];

NSLog(info);

[nameStr release];

[emailStr release];

[birthdayStr release];

[info release];

}

sqlite3_finalize(statement);

}

}

- (void)viewDidLoad

{

[self openDB];

[self insertRecordIntoTableName:@"members" withField1:@"name" field1Value:@"李1" andField2:@"email" field2Value:@"[email protected]" andField3:@"birthday" field3Value:@"12-45-78"];

[self insertRecordIntoTableName:@"members" withField1:@"name" field1Value:@"李2" andField2:@"email" field2Value:@"[email protected]" andField3:@"birthday" field3Value:@"12-45-78"];

[self insertRecordIntoTableName:@"members" withField1:@"name" field1Value:@"李3" andField2:@"email" field2Value:@"[email protected]" andField3:@"birthday" field3Value:@"12-45-78"];

[self getAllContacts];

sqlite3_close(db);

[super viewDidLoad];

}

@end

插入数据后的效果:

查询的效果:

三、小结:

1.数据查询:sqlite3_exec()函数执行sql语句,在没有返回值的情况下(比如创建表格、插入记录、删除记录等操作中)很好用。

也会用到sqlite3_stat结构、sqlite3_prepare_v2()函数、sqlte3_step()函数和sqlite3_finalize()函数。

查询分三个阶段:准备阶段:sqlite3_stat、sqlite3_prepare_v2()

执行阶段:sqlte3_step()

终止阶段: sqlite3_finalize()

2.附表:

sqlite3数据库打开时的返回值及其所代表的含义


返回值


描述


返回值


描述


SQLITE_OK=0


返回成功


SQLITE_FULL=13


数据库满,插入失败


SQLITE_ERROR=1


Sql错误或错误的数据库


SQLITE_CANTOPEN=14


不能打开数据库文件


SQLITE_INTERNAL=2


Sqlite的内部逻辑错误


SQLITE_PROTOCOL=15


数据库锁定协议错误


SQLITE_PERM=3


拒绝访问


SQLITE_EMPTY=16


数据库表为空


SQLITE_ABORT=4


回调函数请求中断


SQLITE_SCHEMA=17


数据库模式改变


SQLITE_BUSY=5


数据库文件被锁


SQLITE_TOOBIG=18


一个表数据行过多


SQLITE_LOCKED=6


数据库中的一个表被锁


SQLITE_CONSTRAINT=19


由于约束冲突而中止


SQLITE_NOMEN=7


内存分配失败


SQLITE_MISMATCH=20


数据类型不匹配


SQLITE_READONLY=8


试图对一个只读数据库进行写操作


SQLITE_MISUSE=21


数据库错误使用


SQLITE_INTERRUPT=9


由sqlite_interrupt()结束操作


SQLITE_NOLFS=22


使用主机操作系统不支持的特性


SQLITE_IOERR=10


磁盘I/O发生错误


SQLITE_AUTH=23


非法授权


SQLITE_CORRUPT=11


数据库磁盘镜像畸形


SQLITE_FORMAT=24


辅助数据库格式错误


SQLITE_NOTFOUND=12


(Internal Only)表或记录不存在


SQLITE_NOTADB=26


打开的不是一个数据库文件

时间: 2024-10-26 20:53:23

ios对SQLite3的使用的相关文章

iOS使用sqlite3原生语法进行增删改查以及FMDB的使用

转载自:http://www.cnblogs.com/Steak/p/3802508.html 首先要导入libsqlite3.dylib并且加入头文件#import <sqlite3.h>,在进行增删改查之前还要先把数据库搞进去. 一种方法是从外面拷贝到程序里:http://www.cnblogs.com/Steak/p/3764395.html 另一种方法就是直接创建表,既然是操纵数据库,那么一定有一个数据库对象,sqlite是C库,所以需要一个C变量: 1 @interface DBHa

ios在SQLite3基本操作

iOS关于sqlite3操作 iPhone中支持通过sqlite3来訪问iPhone本地的数据库. 详细用法例如以下 1:加入开发包libsqlite3.0.dylib 首先是设置项目文件.在项目中加入iPhone版的sqlite3的数据库的开发包.在项目下的Frameworks点击右键.然后选择libsqlite3.0.dylib文件. libsqlite3.0.dylib文件地址: /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/i

iOS关于sqlite3操作

iPhone中支持通过sqlite3来访问iPhone本地的数据库. 具体使用方法如下 1:添加开发包libsqlite3.0.dylib 首先是设置项目文件,在项目中添加iPhone版的sqlite3的数据库的开发包,在项目下的Frameworks点击右键,然后选择libsqlite3.0.dylib文件. libsqlite3.0.dylib文件地址:  /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk

【iOS】sqlite3的使用(増删改查)

目录: 一.sqlite3常用函数 二.将sqlite3集成到项目,实现増删改查 三.封装DBManager 四.Demo 一.sqlite3常用函数及解释 (1)sqlite3_open: 用来创建和打开数据库文件,接收两个参数,第一个是数据库的名字,第二个是数据库的句柄.如果数据库文件不存在,将首先新建它,然后再打开它,否则只是打开它. (2)sqlite3_prepare_v2: 使用格式化的字符串来获得sql准备语句(prepared statement),然后转化为可被SQLite3识

iOS之Sqlite3封装

一.代码下载 代码下载地址 二.实例效果展示 imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="效果图二.png" title=""> imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="效果图三.png" title=""> 三.实例项目简单介绍 这个实例主要是封装sq

iOS:转载sqlite3

SQLITE3 使用总结 2012-08-21 13:48:28 分类: SQLite/嵌入式数据库 SQLITE3 使用总结 2009-09-16 07:36 2624人阅读 评论(10) 收藏 举报 前序: Sqlite3 的确很好用.小巧.速度快.但是因为非微软的产品,帮助文档总觉得不够.这些天再次研究它,又有一些收获,这里把我对 sqlite3 的研究列出来,以备忘记. 这里要注明,我是一个跨平台专注者,并不喜欢只用 windows 平台.我以前的工作就是为 unix 平台写代码.下面我

IOS-sqlite3数据库: create table数据库表及对数据库表的增删改查(create/insert/delete)

1.步骤是: 先加入sqlite开发库libsqlite3.dylib, 新建或打开数据库, 创建数据表, 插入数据, 查询数据并打印 2.sqlite 的方法 sqlite3          *db, 数据库句柄,跟文件句柄FILE很类似 sqlite3_stmt *stmt, 这个相当于ODBC的Command对象,用于保存编译好的SQL语句 sqlite3_open(),    打开数据库,没有数据库时创建.sqlite3_exec(),    执行非查询的sql语句Sqlite3_st

iOS中sqlite3操作

声明:以下命令我没有全部使用过, 仅用于收藏, 欢迎大家指出其中的错误 'SELECT  count(*)   FROM sqlite_master WHERE type="table" AND name = "table_name"                                    //从sqlite_master这个系统表中查找名字为"table_name"的表的数量,没错, 是数量,所以,如果结果大于0,说明这个表存 '

IOS-sqlite3

一.数据库基本知识 1.表-table 字段-属性-列-column 纪录-行-row 2.基本类型 integer:整型 real:浮点型 text:文本字符串 blob:二进制数据 sqlite可以设定为无类型参数. 3.SQL数据库不分大小写 二.SQL语句 结构化查询语言,是对关系型数据库的数据进行定义和操作的语言(增删改查,CRUD). 1.数据库定义语句:DDL(Data Definition Language) 包括create和drop等操作(创建和删除) CREAT TABLE