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(@"添加失败!");
    }
}


@end

 

 

 

总结:

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

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

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

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

 

 

 

 

SQLite3 基本使用方法(一),古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。