首页 > 代码库 > 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文件?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。