标签:
SQLite采用动态数据类型,可以跨平台使用,不像CoreData是苹果专用的:先介绍一下在Xcode中的简单使用:
先连接数据库如图:
然后引入头文件#import <sqlite3.h>
代码开始前先介绍一下sq语句:
//1.创建表
语法:
create table 表名(字段1 类型 约束1 约束2, 字段2 类型 约束1 约束2);
create table if not exists 表名(字段1 类型 约束1 约束2, 字段2 类型 约束1 约束2);
//事例:
需求:创建一个student表,表中的字段有学号,姓名,年龄,学号约束条件:主键,自增,不能为空;姓名默认为‘无名氏’;年龄:大于16岁;
create table student(s_id integer primary key autoincrement not null, s_name text default ‘无名氏‘, s_age integer check (s_age > 16));
//2.插入数据
语法:
insert into 表名(字段1, 字段2, 字段3)values(字段1值, 字段2值, 字段3值);
//事例:插入学生姓名,年龄
insert into student(s_name, s_age)values(‘贝爷‘, 30);
insert into student(s_name, s_age)values(‘小李子‘, 40);
//3.更新数据
语法:
update 表名 set 字段名1 = 修改值1, 字段名2 = 修改值2 where 条件;
update student set s_age = 25 where s_age = 30;
//4.删除数据
语法:
delete from 表名 where 条件;
//需求:删除年龄为10岁的学生
delete from student where s_age = 10;
//5.查询数据
语法:
select 要查找的字段 from 表名 where 条件;
select *from student where s_name = ‘贝爷‘;//查询所有信息
select s_id, s_age from student where s_name = ‘贝爷‘;
下面就开始代码了:
#import "DataBaseHandle.h"
#import <sqlite3.h>
@interface DataBaseHandle ()
//数据库的存储路径
@property (nonatomic, copy) NSString *dbPath;
@end
static DataBaseHandle *dataBase = nil;
@implementation DataBaseHandle
//单例
+ (DataBaseHandle *)shareDataBaseHandle {
if (dataBase == nil) {
dataBase = [[DataBaseHandle alloc] init];
}
return dataBase;
}
//懒加载需要给数据库路径赋值
- (NSString *)dbPath {
if (_dbPath == nil) {
//需求:路径存储在Documents文件夹下,数据库文件为person.sqlite;
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
_dbPath = [documentPath stringByAppendingPathComponent:@"person.sqlite"];
}
return _dbPath;
}
//打开数据库;好多地方都会使用到数据库,所以初始化一个数据库 的静态变量
static sqlite3 *db = nil;
- (void)openDataBase {
//打开数据库,使用int去接收打开的结果
//第一个参数:表示数据库的存储路径
//第二个参数:二级指针,数据库的地址
int result = sqlite3_open([self.dbPath UTF8String], &db);
//result是个枚举值,有很多种情况
if (result == SQLITE_OK) {
NSLog(@"数据库打开成功");
} else {
NSLog(@"数据库打开失败");
}
}
- (void)updateWithUID:(NSInteger)uid {
NSString *updateStr = @"update person set name = ‘悟空‘ where uid = ?";
sqlite3_stmt *stmt = nil;
int result = sqlite3_prepare(db, updateStr.UTF8String, -1, &stmt, NULL);
if (result == SQLITE_OK) {
sqlite3_bind_int64(stmt, 1, uid);
if (sqlite3_step(stmt) == SQLITE_DONE) {
NSLog(@"更新数据成功");
} else {
NSLog(@"更新数据失败");
}
} else {
NSLog(@"result = %d", result);
}
sqlite3_finalize(stmt);
}
- (void)deleteWithUID:(NSInteger)uid {
NSString *deleteStr = [NSString stringWithFormat:@"delete from person where uid = %ld", uid];
int result = sqlite3_exec(db, deleteStr.UTF8String, NULL, NULL, NULL);
if (result == SQLITE_OK) {
NSLog(@"删除成功");
} else {
NSLog(@"删除失败");
}
}
以上只是简单举例。
注意点:OC中字符串别忘了加@ 数据库中的%@写成‘%@’ 别忘了加单引号(字符串加单引号,integer不用加)
[NSString stringWithFormat:@"delete from person where name = ‘%@’“, name1]与@"delete from person where name = ’name1”
区别在于若name1 = @“liubei”;语句1表示name属性==liubei时满足条件;语句2表示name的属性==name1时满足条件;
标签:
原文地址:http://www.cnblogs.com/bdlfbj/p/5487582.html