SQLite简介
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。
SQLite3
在XCode工程中,打开targets,在Build Phases下导入Libsqlite.tbd,在需要使用sqlite3的位置导入头文件即可。
使用SQLite的时候我们要注意语法格式的规范,按照要求来:
掌握常用的SQL语句:
创建表:”create table if not exists 表名(id intager primary key, 数据对象1 对象类型text,数据对象2 对象类型BLOB)”
添加数据:”insert into 表名 values(null,?,?)”
删除数据 : “delete from 表名 where intTeger = ?”
修改数据: “update 表名 set 数据对象1 = ?,数据对象2 = ? where intTeger”
查询获取数据:”select *from 表名”
具体的代码实现如下:
我们先创建要被它使用到的数据对象类型
#import <Foundation/Foundation.h>
@interface ClassRoom : NSObject
@property(nonatomic,assign)NSInteger intTeger;
@property(nonatomic,strong)NSString *name,*age;
之后 我们要在业务处理层的.h文件中写下具体的语法格式
// 导入数据对象
#import "ClassRoom.h"
// 导入库
#import <sqlite3.h>
@interface DataBase : NSObject
{
sqlite3 *sqliteDB;
}
// 单列
+(instancetype)initDataBase;
// 初始数据库
-(void)initData;
// 创建数据库表格
-(void)creatTable;
// 添加数据
-(void)addSqlite:(ClassRoom *)theData;
// 删除数据
-(void)deleteData:(NSInteger *)theId;
// 修改数据
-(void)changeData:(ClassRoom *)theData;
// 查询数据
-(NSMutableArray *)dataArray;
// 关闭数据库
-(void)closeData;
接着 在业务处理层的.m文件中为其写下具体的代码
@implementation DataBase
// 创建单例变量
static DataBase *database;
// 单列
+(instancetype)initDataBase
{
if (!database)
{
database = [[DataBase alloc] init];
}
return database;
}
// 初始数据库
-(void)initData
{
// 创建Document目录
NSString *theStrPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
// 创建数据库表名的路径
NSString *theStr = [theStrPath stringByAppendingString:@"/1508E.db"];
if (sqlite3_open([theStr UTF8String],&sqliteDB) == SQLITE_OK)
{
NSLog(@"数据库打开成功");
// 创建表格
[self creatTable];
}
else
{
NSLog(@"打开失败");
}
}
// 创建数据库表格
-(void)creatTable
{
// 创建sql语句 格式: creat table if not exists 表名 (主键id integer primary key, 加上所有的用到的数据)
const char *sql = "creat table if not exists classroom(inTeger integer primary key,name text, age text)";
NSLog(@"sql>>>>%s",sql);
// 预编译指针
sqlite3_stmt *stmt;
// 绑定预编译指针
sqlite3_prepare_v2(sqliteDB, sql, -1, &stmt, nil);
}
// 添加数据
-(void)addSqlite:(ClassRoom *)theData
{
// 创建sql语句
const char *sql = "insert into classroom values(null,?,?)";
// 预编译指针
sqlite3_stmt *stmt;
// 绑定预编译指针
sqlite3_prepare_v2(sqliteDB, sql, -1, &stmt, nil);
// 绑定占位符
sqlite3_bind_text(stmt, 1, [theData.name UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 2, [theData.age UTF8String], -1, SQLITE_TRANSIENT);
//执行预编译指针
sqlite3_step(stmt);
// 销毁预编译指针
sqlite3_finalize(stmt);
}
// 删除数据
-(void)deleteData:(NSInteger *)theId
{
// 创建sql语句
const char *sql = "delete from classroom where inTeger = ?";
// 预编译指针
sqlite3_stmt *stmt;
// 绑定预编译指针
sqlite3_prepare_v2(sqliteDB, sql, -1, &stmt, nil);
// 绑定占位符
sqlite3_bind_int(stmt, 1, (int) theId);
//执行预编译指针
sqlite3_step(stmt);
// 销毁预编译指针
sqlite3_finalize(stmt);
}
// 修改数据
-(void)changeData:(ClassRoom *)theData
{
// sql语句
const char *sql = "updata classroom set name = ?,age = ? where inTeger";
// 预编译指针
sqlite3_stmt *stmt;
// 绑定预编译指针
sqlite3_prepare_v2(sqliteDB, sql, -1, &stmt, nil);
// 绑定占位符
sqlite3_bind_text(stmt, 1, [theData.name UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 2, [theData.age UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_int(stmt, 3, (int)theData.intTeger);
//执行预编译指针
sqlite3_step(stmt);
// 销毁预编译指针
sqlite3_finalize(stmt);
}
// 查询数据
-(NSMutableArray *)dataArray
{
const char *sql = "select *from classroom";
// 预编译指针
sqlite3_stmt *stmt;
// 绑定预编译指针
sqlite3_prepare_v2(sqliteDB, sql, -1, &stmt, nil);
NSMutableArray *arr = [NSMutableArray array];
// 绑定占位符
//执行预编译指针
while (sqlite3_step(stmt)== SQLITE_ROW)
{
ClassRoom *room = [[ClassRoom alloc] init];
room.intTeger = sqlite3_column_int(stmt, 0);
room.name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
room.age = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];
[arr addObject:room];
}
// 销毁预编译指针
sqlite3_finalize(stmt);
return arr;
}
// 关闭数据库
-(void)closeData
{
sqlite3_close(sqliteDB);
}