首页 > 代码库 > SQLite3 基本使用方法(一)

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文件?