一、在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. Hot to get clicked cell column in DevExpress XtraGrid

    To accomplish this task, use the GridView.RowCellClickevent. Please note that this event will not fi ...

  2. 《算法问题实战策略》-chaper14-整数论

    Lucas定理: 在组合计数问题中,我们常面临组合数C(n,m)过大而无法直接计算的困境,那么这里的Lucas定理给出了一个较大组合数进行取余运算的一种递归算法. 什么是Lucas定理? Lucas定 ...

  3. POJ2533 Longest ordered subsequence

    Longest Ordered Subsequence Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 41984   Acc ...

  4. java二进制文件复制

    package com.starain.io; import java.io.BufferedInputStream;import java.io.BufferedOutputStream;impor ...

  5. MD5方法代码(生成小写的md5) C#版本

    public string GetMD5Str(string input) { // Use input string to calculate MD5 hash MD5 md5 = System.S ...

  6. javascript基础笔记学习

    /** * Created by Administrator on 2016/12/26. */ /* var box; alert( typeof box); box是Undefined类型,值是u ...

  7. 循序渐进DB2(第2版)——DBA系统管理、运维与应用案例

    <循序渐进DB2(第2版)——DBA系统管理.运维与应用案例> 基本信息 作者: 牛新庄    出版社:清华大学出版社 ISBN:9787302323013 上架时间:2013-7-3 出 ...

  8. sql为了实现转换的行列

    全名 学科 成绩 牛芬 语文 81 牛芬 数学 88 牛芬 英语 84 张三 语文 90 张三 数学 98 张三 英语 90 (表一) 现有一个表如(表一) 姓名 语文 数学 英语 牛芬 81 88 ...

  9. ls Common Command-Line Options

    ls  Common Command-Line Options Command  Use: ls -l    Shows a long listing, which includes informat ...

  10. css07家用电器分类

    1.创建一个html页面 <!DOCTYPE html> <html> <head lang="en"> <meta charset=&q ...