SQLite3 基本使用方法(一)

一、SQLite3简介
    SQLite3是一款开源的嵌入式关系类型数据库, 可移植性好、易使用、内存开销小。
    SQLite3是无类型的,意味着可以保持任何类型的数据到任意表任意字段。
    SQLite3常用的5中数据类型: text/integer/float/boolean/blob。

二、添加库
    在IOS中要使用SQLite3,需要添加库文件:  libsqlite3.bylib并导入主头文件,这是一个C语言的库。

三、 使用步骤:
    1. 创建数据库(sqlite3_opendb)
    2. 单步执行操作 (sqlite3_exec)
        - 创建数据库表
        - 数据操作
            · 插入数据
            · 更新数据
            · 删除数据
    3. 查询操作
        - sqlite3_prepare_v2 检查sql合法性
        - sqlite3_step 逐行获取查询结果
        - sqlite3_coloum_xxx 获取对应类型的内容
        - sqlite3_finalize 释放stmt

四、Demo

.h

#import <UIKit/UIKit.h>
#import <sqlite3.h>

@interface MSViewController : UIViewController
{
    //Sqlite3数据库的链接,基于该链接可以进行数据库操作
    sqlite3 * m_pDb;
}
@end

.m

#import "MSViewController.h"
#import <sqlite3.h>

@interface MSViewController ()

@end

@implementation MSViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    //1. 创建数据库
    [self openDB];
    //2. 创建数据库表
    [self createTable];
    //3. 数据操作

    //添加
    //[self addUserWithName:@"YY" pass:@"yy135"];

    //查询
    /*
    NSMutableArray * arr =  [self selectAllUser];
    for (int i=0; i<arr.count; i++) {
        NSLog(arr[i]);
    }*/

    //修改
    //[self updateUserId:2 name:@"wangxin" pass:@"wangxin000"];

    //删
    [self deleteUserId:2];

}

///Users/username/Library/Application Support/iPhone Simulator/  "沙盒路径"
//打开数据库,如不存在,则创建。
- (void) openDB
{
    //生成存放在沙盒中的数据库完整路径
    NSString * strDocDir = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
    NSString * strDbName = [strDocDir stringByAppendingPathComponent: @"mySqlite3DB.db"];

    //sqlite3 数据库的链接,基于该链接可以进行数据库操作
    if (SQLITE_OK == sqlite3_open(strDbName.UTF8String, &m_pDb))
    {
        NSLog(@"创建/打开数据库成功!");
    }
    else
    {
        NSLog(@"创建/打开数据库失败!");
    }
}

//创建数据库表
//使用DBMANAGE创建,把生成的代码赋值过来就OK了。
//表名:tbl_User
//IF NOT EXISTS

//IOS 把id设为自增,在添加数据的时候,也要用null站位,不能不写。
- (void) createTable
{
    NSString * strSql = @"CREATE TABLE IF NOT EXISTS tbl_User (Id integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,UserName text,UserPass text)";

    char * pErrorMsg;
    if (SQLITE_OK ==  sqlite3_exec(m_pDb, strSql.UTF8String, NULL, NULL, &pErrorMsg)) {
        NSLog(@"创建数据表成功!");
    }
    else
    {
        NSLog(@"创建数据表失败!");
    }

}

//增
- (void)addUserWithName:(NSString *)strName pass:(NSString *)strPass
{
    NSString * strSql = [NSString stringWithFormat: @"INSERT INTO tbl_User VALUES (null, ‘%@‘, ‘%@‘)", strName, strPass];

    char * pErrorMsg;
    if (SQLITE_OK ==  sqlite3_exec(m_pDb, strSql.UTF8String, NULL, NULL, &pErrorMsg)) {
        NSLog(@"添加成功!");
    }
    else
    {
        NSLog(@"添加失败!");
    }
}

//查
- (NSMutableArray *) selectAllUser
{
    NSString * strSql = @"SELECT * FROM tbl_User";

    NSMutableArray * arrReturn = [NSMutableArray array];

    //1. 评估准备SQL语法是否正确
    sqlite3_stmt * pStmt = NULL;
    if (SQLITE_OK == sqlite3_prepare_v2(m_pDb, strSql.UTF8String, -1, &pStmt, NULL))
    {
        NSLog(@"sql语法正确!");

        //2. 如果能正常查询,调用单步执行方法, 依次取得查询结果
        //如果得到一行记录
        while (SQLITE_ROW == sqlite3_step(pStmt))
        {
            //3.获取/显示查询结果
            int nId = sqlite3_column_int(pStmt, 0);
            const unsigned char * pUserName = sqlite3_column_text(pStmt, 1);
            NSString * pUserNameUTF8 = [NSString stringWithUTF8String:(const char *)pUserName];
            const unsigned char * pUserPass = sqlite3_column_text(pStmt, 2);
            NSString * pUserPassUTF8 = [NSString stringWithUTF8String:(const char *)pUserPass];

            NSString * strTemp = [NSString stringWithFormat:@"%d -- %@ -- %@",nId,pUserNameUTF8, pUserPassUTF8];
            [arrReturn addObject:strTemp];
        }
    }
    else
    {
        NSLog(@"sql语法错误!");
    }
    //4. 释放句柄
    sqlite3_finalize(pStmt);

    return arrReturn;
}
//改
- (void) updateUserId:(int)nId name:(NSString *)strUserName pass:(NSString *)strUserPass
{
    NSString * strSql = [NSString stringWithFormat: @"UPDATE tbl_User SET UserName= ‘%@‘, UserPass=‘%@‘ WHERE Id= %d", strUserName, strUserPass, nId];

    char * pErrorMsg;
    if (SQLITE_OK ==  sqlite3_exec(m_pDb, strSql.UTF8String, NULL, NULL, &pErrorMsg)) {
        NSLog(@"添加成功!");
    }
    else
    {
        NSLog(@"添加失败!");
    }
}

//删
- (void) deleteUserId:(int)nId
{
    NSString * strSql = [NSString stringWithFormat: @"delete from tbl_User where Id = %d", nId];

    char * pErrorMsg;
    if (SQLITE_OK ==  sqlite3_exec(m_pDb, strSql.UTF8String, NULL, NULL, &pErrorMsg)) {
        NSLog(@"添加成功!");
    }
    else
    {
        NSLog(@"添加失败!");
    }
}
); } } //删 - (void) deleteUserId:(int)nId { NSString * strSql = [NSString stringWithFormat: @"delete from tbl_User where Id = %d", nId]; char * pErrorMsg; if (SQLITE_OK == sqlite3_exec(m_pDb, strSql.UTF8String, NULL, NULL, &pErrorMsg)) { NSLog(@"添加成功!"); } else { NSLog(@"添加失败!"); } } @end

总结:

  1. 和MSSQL基本差不多。SQL也是基本相同的。

    就是在创建表ID自增时,当插入时,要用NULL站位,和MSSQL有区别。

  2. 增、删、改 可代码重构。执行都是一个函数。

  3. 疑问:怎么实时管理真机上的DB文件?

时间: 2024-11-04 14:39:49

SQLite3 基本使用方法(一)的相关文章

SQLite3 基本使用方法(二)

工程目录: Singleton.h //.h #define single_interface(class) + (class *)shared##class; //.m // \ 代表下一行也属于宏 // ##是分隔符 #define single_implementation(class) static class *_instance; + (class *)shared##class { if (_instance == nil) { _instance = [[self alloc]

SQLite3数据库恢复方法总结

最近做SQLite 3数据库的恢复,找了比较多相关方面的论文,在这里记录一下. 一.基于SQLite 文件系统的恢复 上一篇文章中,记录了SQLite 3的文件结构,里面提到了一点数据库中记录单元删除前后的底层变化,但是不太详细.在这里详细讲一下. SQLite 3数据库的删除与PC的文件系统数据的删除有些类似,就是删除的过程中,原始数据是不会被删除的,它会存留在底层,直到新的数据存储时覆盖掉.另外,在删除的过程中,当删除的记录单元较多时,数据库会整合自由块,这样一个自由块就可能包含多个记录单元

Xcode7.2使用sqlite3数据库的方法

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 之前版本的Xcode是可以直接连接sqlite3的库文件的,但是Xcode7.2中虽然有sqlite3.tbd文件,但是在编译连接时会报错无法找到该文件. 如果要在Xcode7.2中使用sqlite数据库,我们可以手动添加sqlite3的库文件,具体做法如下: 选择项目目标的Build Phases栏: 点击+按钮,在弹出的窗口中点击Add Other-按钮

CentOS编译PHP过程中常见错误信息的解决方法

原文链接:http://www.linuxidc.com/Linux/2014-05/102327.htm ******************************************************************************* checking for BZip2 support- yes checking for BZip2 in default path- not found configure: error: Please reinstall the

SQLite3 嵌入式数据库

关于sqlite3数据库在iphone项目中的应用大体上有下面几个步骤: 1. 在新建的项目中右击Frameworks文件夹,添加libsqlit3.dylib库: 2. 在.h的头文件中声明一个类型为sqlite3的变量:// 这里要特别说明一下这个变量,开始的时候是为NULL的,数据库打开之后就不为空了,不知道sqlite3中对这中结构的设计是出于什么目的,暂且记住这么用吧,如何你对它有更好的理解不妨告诉我一下. sqlite3 *_database; 3. 获取Documents文件夹的路

[How to]集成SQLite3

1.简介 本文将介绍IOS的开发过程中如何集成Sqlite的方法,目前Sqlite的版本为3,所以我们称之为Sqlite3. 在本文中我将介绍Sqlite3的开发配置,本地Sqlite3数据库的建立通用的数据库访问类. 2.Sqlite3的开发环境配置 1.在工程中引入SQlite3开发库. 按照下图进行设定: 3.建立Sqlite数据库和表 1.打开终端窗口,输入如下命令: 172-11-253-106:~ apple$ sqlite3 exampleSqlite3_db.sql SQLite

LAMP系列之PHP编译过程中常见错误信息的解决方法

LAMP系列之PHP编译过程中常见错误信息的解决方法 在CentOS编译PHP5的时候有时会遇到以下的一些错误信息,基本上都可以通过yum安装相应的库来解决.以下是具体的一些解决办法: ******************************************************************************* checking for BZip2 support- yes checking  for BZip2 in default path- not foun

安装pysqlite-2.6.3

下载链接:http://pypi.python.org/pypi/pysqlite 运行安装出错 error: Unable to find vcvarsall.bat 解决方法: 只要安装了VS系列软件,在"..python安装路径…\Lib\distutils目录下有个msvc9compiler.py找到243行 toolskey = "VS%0.f0COMNTOOLS" % version oolskey = "你的VS版本COMNTOOLS" 其中

深入理解iPhone数据持久化(手把手教你iphone开发 – 基础篇)

在所有的移动开发平台数据持久化都是很重要的部分:在j2me中是rms或保存在应用程序的目录中,在symbian中可以保存在相应的磁盘目录中和数据库中.symbian中因为权限认证的原因,在3rd上大多数只能访问应用程序的private目录或其它系统共享目录.在iphone中,apple博采众长,提供了多种数据持久化的方法,下面笔者会逐个进行详细的讲解. iphone提供的数据持久化的方法,从数据保存的方式上讲可以分为三大部分:属性列表.对象归档.嵌入式数据库(SQLite3).其他方法. 一.属