一、在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:@"df@qq.com" andField3:@"birthday" field3Value:@"12-45-78"];
    
    [self insertRecordIntoTableName:@"members" withField1:@"name" field1Value:@"李2" andField2:@"email" field2Value:@"df@qq.com" andField3:@"birthday" field3Value:@"12-45-78"];
    
    [self insertRecordIntoTableName:@"members" withField1:@"name" field1Value:@"李3" andField2:@"email" field2Value:@"df@qq.com" 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

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

致力于ios开发
 
 

ios对SQLite3的使用的更多相关文章

  1. ios在SQLite3基本操作

    iOS关于sqlite3操作 iPhone中支持通过sqlite3来訪问iPhone本地的数据库. 详细用法例如以下 1:加入开发包libsqlite3.0.dylib 首先是设置项目文件.在项目中加 ...

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

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

  3. iOS关于sqlite3操作

    原文:http://hi.baidu.com/clickto/blog/item/0c6904f787c34125720eec87.html iPhone中支持通过sqlite3来访问iPhone本地 ...

  4. iOS 数据库sqlite3.0操作--超简单--看我就够啦

    iOS客户端数据存储的方式有很多,下面主要是介绍苹果自带的sqlite3.0的使用方法. 首先导入sqlite3.0的框架.然后导入头文件#import <sqlite3.h>就行了 下面 ...

  5. iOS- 简单说说iOS移动客户端SQLite3的基本使用

    1.为什么要使用SQLite3? •大量数据需要存储 •管理数据,存储数据   SQLite是一种关系型数据库(也是目前移动客户端的主流数据库)     2.SQLite3的几种存储类型   a.NU ...

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

    首先要导入libsqlite3.dylib并且加入头文件#import <sqlite3.h>,在进行增删改查之前还要先把数据库搞进去. 一种方法是从外面拷贝到程序里:http://www ...

  7. iOS之Sqlite3封装

    一.代码下载 代码下载地址 二.实例效果展示 imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="效果图二.png&q ...

  8. iOS:转载sqlite3

     SQLITE3 使用总结 2012-08-21 13:48:28 分类: SQLite/嵌入式数据库 SQLITE3 使用总结 2009-09-16 07:36 2624人阅读 评论(10) 收藏  ...

  9. iOS中sqlite3操作

    声明:下面命令我没有所有使用过, 仅用于收藏, 欢迎大家指出当中的错误 'SELECT  count(*)   FROM sqlite_master WHERE type="table&qu ...

随机推荐

  1. Delphi 使用自定义消息

    Delphi 使用自定义消息   1.先用Const 定义一个常量,例如 const WM_MyMessage=WM_USER+$200; 2.在要实现的unit中定义一个私有方法 procedure ...

  2. Maven搭建环境(Linux& Windows)

    Linux下安装Maven 1.前提条件: 1)下载并安装好JDK .在终端输入命令“java -version”,如果出现类似如下信息说明JDK安装成功. $ java -version java ...

  3. windows2012R2虚拟机快速激活的方法

    相信Hyper-v管理员都有这样的经历,安装多台虚拟机后,都要一台一台手工激活,如果虚拟机足够多的话,这是一项很繁琐的工作,但从Windows Server 2012 R2开始,就不需要这么做了,微软 ...

  4. Photography theory: a beginner's guide(telegraph.co.uk)

    By Diane Smyth, Tim Clark, Rachel Segal Hamilton and Lewis Bush 11:00AM BST 09 Jun 2014   Have you r ...

  5. git commit error about 'vi'

    error: There was a problem with the editor 'vi'. Please supply the message using either -m or -F opt ...

  6. JVM性能调优监控工具

    命令:jps.jstat.jmap.jhat.jstack 简介:(1) jmap -dump:format=b,file=eclipse.bin 10481  生成堆转储快照eclipse.bin ...

  7. Microsoft Dynamics CRM4.0编程---说明

    Introduction(说明) If your organization has customers, you need a software system to help you manage y ...

  8. 《火球——UML大战需求分析》(第1章 大话UML)——1.4 如何学好UML?

    说明: <火球——UML大战需求分析>是我撰写的一本关于需求分析及UML方面的书,我将会在CSDN上为大家分享前面几章的内容,总字数在几万以上,图片有数十张.欢迎你按文章的序号顺序阅读,谢 ...

  9. 编译lua版本问题

    Compile++ thumb  : game_shared <= main.cppjni/hellocpp/main.cpp: In function 'void Java_org_cocos ...

  10. Bitmap基本概念及在Android4.4系统上使用BitmapFactory的注意事项

    本文首先总结一下Bitmap的相关概念,然后通过一个实际的问题来分析设置BitmapFactory.options的注意事项,以减少不必要的内存占用率,避免发生OOM. 一. Bitmap的使用tri ...