SQLite数据库方法总结

步骤1. 导入 SQLite3框架 在 Build Phases 里的 Link Binary With Libraries 点加号 添加 SQLite3框架
步骤2. 建立父类是 NSObject 的单例类
.h 中
2.1 导入 #import

pragma mark—- 创建数据库表

        建数据库表sql语句, 若已经创建过则不会再创建  数据库自己会判断。table studentInfo already exists
        // AUTOINCREMENT
        NSString *createTableSql = @"CREATE TABLE ActivityInfo (ID TEXT PRIMARY KEY  NOT NULL, title TEXT, imageUrl TEXT,data BLOB); CREATE TABLE MovieInfo(ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, title TEXT, imageUrl TEXT, data BLOB)";
        // 敲出来之后 :  sqliteManager 用数据库软件验证一下
        // 执行非查询 ,sql 语句 , 可以使用比较便捷的方式 sqlite_exec(); // execute
        sqlite3_exec(db, createTableSql.UTF8String, NULL, NULL, NULL); // c 中是NULL

}
});
return db;
}

2.5 关闭方法实现

+ ( void )close // 关闭数据库
{
sqlite3_close ( db );
db = nil ; //将指针付空避免野指针操作
}
步骤3 将数据库与需要将数据保存到数据库中的 model 类进行关联 可实现对数据库的增删改查操作
.h 中
3.1引入数据库单例的头文件
3.2声明 增删改查的类方法
.m 中
3.3 增删改查实现框架
// 1.sqlite3* 需要一个被打开的数据库指针 .
sqlite3 *db =[DBHelper open];
// 2.需要 sqlite3_stmt sql 语句对象 // stmt 是 statement 语句的意思
sqlite3_stmt *stmt = nil;
// 3.sqlite3_prepare_v2() 预执行方法
int result = sqlite3_prepare_v2(db,”select * from studentInfo/此处填 SQLite 命令语句需要赋值的内容用?替代/”, -1, &stmt, nil);
// 参数: db 数据库指针, const char *,C语言类型的 sql 字符串,-1系统读取 sql 字符串的长度为无穷大,& stmt 语句对象, nil, 没有执行的 sql 字符串
// 此方法作用是:让 sql 语句对象 预执行sql 字符串,执行成功才会 接着操作数据库
// 4.对预执行进行判断
if (result == SQLITE_OK) {
// 给?参数赋值,? 注意: 下标从1开始
sqlite3_bind_text(stmt, 1, name.UTF8String, -1, nil);
sqlite3_bind_int(stmt, 2, (int)age);
}
// stmt 所占空间给释放掉
sqlite3_finalize(stmt);


附加 增删改查具体实现
+(NSArray*)findAllStundets
{
NSMutableArray *studentArray = [NSMutableArray array];
// 1.sqlite3*需要一个被打开的数据库指针.
sqlite3 *db =[DBHelper open];
// 2.需要 sqlite3_stmt sql 语句对象 // stmt 是 statement 语句的意思
sqlite3_stmt *stmt = nil;
// 3.sqlite3_prepare_v2() 预执行方法
int result = sqlite3_prepare_v2(db,”select * from studentInfo/此处填 SQLite 命令语句需要赋值的内容用?替代/”, -1, &stmt, nil);
// 参数: db 数据库指针, const char *,C语言类型的 sql 字符串,-1系统读取 sql 字符串的长度为无穷大,& stmt 语句对象, nil, 没有执行的 sql 字符串
// 此方法作用是:让 sql 语句对象 预执行sql 字符串,执行成功才会 接着操作数据库
// 4.对预执行进行判断
if (result == SQLITE_OK) {
// 5.执行语句 sqlite3_step, 查询需要对 返回结果进行判断
while (sqlite3_step(stmt) == SQLITE_ROW) {
// 查询操作的sqlite3_step(stmt)会返回当前行,SQLITE_ROW,并且指向下一行,直到下面没有数据,返回SQLITE_ DOWN不再是 SQLITE_ROW
// 6.通过 sqlite_column_类型() 逐列取值
// 姓名
const unsigned char *cName = sqlite3_column_text(stmt, 1);
// 年龄
int age = sqlite3_column_int(stmt, 2);
int sid = sqlite3_column_int(stmt, 0);
// 把 c 字符串 转化为 oc 字符串
NSString name = [NSString stringWithUTF8String:(const char)cName];
// 根据获得值创建 student 变量
Student *student = [ Student studnetWithSid:sid name:name age:age];
[studentArray addObject:student];
}
}
// stmt 所占空间给释放掉
sqlite3_finalize(stmt);

return studentArray;

}
// 查某一个
+ (Student*)findStudentBySid:(NSInteger)sid
{
Student *student = nil;
sqlite3 *db = [DBHelper open];
sqlite3_stmt *stmt = nil;
int result = sqlite3_prepare_v2(db, “select * from studentInfo where sid = ?”, -1, &stmt, nil);
if (result == SQLITE_OK) {
// 给?参数赋值,? 注意: 下标从1开始
sqlite3_bind_int(stmt, 1, (int)sid);
// 6.执行
sqlite3_step(stmt);
NSString name = [NSString stringWithUTF8String:(const char) sqlite3_column_text(stmt, 1)];
int age = sqlite3_column_int(stmt, 2);
student = [Student studnetWithSid:sid name:name age:age];
}
// stmt 所占空间给释放掉
sqlite3_finalize(stmt);
return student;
}
// 插入一条学生数据
+ (void)insertStudnetForName:(NSString*)name age:(NSInteger)age
{
sqlite3 *db = [DBHelper open];
sqlite3_stmt *stmt = nil;
int result = sqlite3_prepare_v2(db, “insert into studentInfo (name,age) values(?,?)”, -1, &stmt, nil);
if (result == SQLITE_OK) {
// 给?参数赋值,? 注意: 下标从1开始
sqlite3_bind_text(stmt, 1, name.UTF8String, -1, nil);
sqlite3_bind_int(stmt, 2, (int)age);
// 6.执行
if (sqlite3_step(stmt) == SQLITE_OK) {
NSLog(@”数据插入成功!”);
}
}
sqlite3_finalize(stmt);

}
// 修改学生数据
+ (void)updataStudentForSid:(NSInteger)sid newName:(NSString*)newName newAge:(NSInteger)newAge
{
sqlite3 *db = [DBHelper open];
sqlite3_stmt *stmt = nil;
int result = sqlite3_prepare_v2(db, “update studentInfo set age = ? where sid = ?”, -1, &stmt, nil);
if (result == SQLITE_OK) {
// 给?参数赋值,? 注意: 下标从1开始
sqlite3_bind_int(stmt, 2, (int)sid);
sqlite3_bind_int(stmt, 1, (int)newAge);
if (sqlite3_step(stmt) == SQLITE_DONE) {
NSLog(@”修改成功”);
}
}
sqlite3_finalize(stmt);
}
// 删除学生数据,根据 sid
+ (void)deleteStudentForSid:(NSInteger)sid
{
sqlite3 *db = [DBHelper open];
sqlite3_stmt *stmt = nil;
int result = sqlite3_prepare_v2(db, “delete from studentInfo where sid = ?”, -1, &stmt, nil);
if (result == SQLITE_OK) {
// 给?参数赋值,? 注意: 下标从1开始
sqlite3_bind_int(stmt, 1, (int)sid);
if (sqlite3_step(stmt) == SQLITE_DONE) {
NSLog(@”修改成功”);
}
}
sqlite3_finalize(stmt);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值