IOS开发基础之SQLite3数据库的使用增删改查
ios开发我们可能会使用到数据库进行持久化存储。sqlite3 是轻量级的数据库。
今天我们来介绍sqlite3 数据库。此方法跟java的增删改查很类似。
源码在我的主页里面。
//
// ViewController.m
// sqlite3
//
// Created by 鲁军 on 2021/2/24.
//
#import "ViewController.h"
#import <sqlite3.h>
@interface ViewController ()
{
sqlite3 *_db;
}
@end
@implementation ViewController
/*
在应用程序第一次运行,由于沙盒中没有数据库 ,所以需要创建一个空的数据库
创建数据库的之后,为了保证能够正常运行 通常需要做一些初始化工作,其中最重要的一项工作就是创建数据库的表
而下次使用时 无需再创建数据库表了
**/
- (void)viewDidLoad {
[super viewDidLoad];
//1.
[self openDB];
//NSLog(@"%@",NSHomeDirectory());
[self createTable];
//操作数据
// NSArray *array = @[@"张三",@"李四",@"王二",@"赵六"];
// for(int i = 0;i<50;i++){
// NSString *str=array[arc4random_uniform(4)];
// NSString *name = [NSString stringWithFormat:@"%@%d",str,arc4random_uniform(1000)];
// NSString *phoneNo = [NSString stringWithFormat:@"1889%05d",arc4random_uniform(100000)];
// [self addPerson:name age:18 + arc4random_uniform(20) phoneNo:phoneNo];
// }
[self allPersons];
}
-(void)allPersons{
NSString *sql= @"SELECT id,name,age,phoneNo FROM t_person";
// 1. 评估准备SQL语句是否正确
sqlite3_stmt *stmt = NULL;
if(SQLITE_OK==sqlite3_prepare_v2(_db, sql.UTF8String, -1, &stmt, NULL)){
//2 如果能够正常查询。调用单步执行方法。依次取得查询结果
while(SQLITE_ROW==sqlite3_step(stmt)){
int ID = sqlite3_column_int(stmt, 0);
const unsigned char *name = sqlite3_column_text(stmt, 1);
int age = sqlite3_column_int(stmt, 2);
const unsigned char *phoneNo = sqlite3_column_text(stmt, 3);
NSString *nameUTF8 = [NSString stringWithUTF8String:(const char *)name];
NSString *phoneNoUTF8 = [NSString stringWithUTF8String:(const char *)phoneNo];
NSLog(@"%d -- %@ - %d -- %@",ID,nameUTF8,age,phoneNoUTF8);
}
//3 获取显示查询结果
}else{
NSLog(@"SQL语法错误 ");
}
//4 释放句柄
sqlite3_finalize(stmt);
}
-(void)addPerson:(NSString *)name age:(NSInteger)age1 phoneNo:(NSString *)phoneNo {
NSString *sql =[NSString stringWithFormat:@"INSERT INTO t_person (name, age, phoneNo) VALUES ('%@', '%d', '%@')", name, age1, phoneNo];
[self execSql:sql msg:@"添加个人记录"];
}
-(void)execSql:(NSString *)sql msg:(NSString *)msg{
char *errmsg;
if(SQLITE_OK==sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg))
{
NSLog(@"%@成功",msg);
}else{
NSLog(@"%@失败-%s",msg,errmsg);
}
}
-(void)createTable{
NSString * sql = @"create table IF NOT EXISTS t_person (id integer PRIMARY KEY AUTOINCREMENT,name text,age integer,phoneNo text)";
[self execSql:sql msg:@"创建表"];
}
-(void)openDB{
NSString *docDir =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString * dbName = [docDir stringByAppendingPathComponent: @"my.db"];
//SQLite 数据库的连接,基于连接可以进行数据库的操作
if( SQLITE_OK == sqlite3_open(dbName.UTF8String, &_db)){
NSLog(@"创建打开数据库成功");
}else{
NSLog(@"创建数据库失败");
}
}
@end