iOS增删改查
#import "DataBase.h"
@implementation DataBase
//创建单例.
static sqlite3 *dbPoint=nil;
+(sqlite3 *)openDB{
if (dbPoint) {
return dbPoint;
}
//目标路径。
NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSLog(@"12312312321====%@",docPath);
NSString *sqlFilePath=[docPath stringByAppendingPathComponent:@"lianxi2.sqlite"];
//原始路径。
NSString *orignFilePath=[[NSBundlemainBundle]pathForResource:@"lianxi2"ofType:@"sqlite"];
//创建文件管理器。
NSFileManager *fm=[NSFileManagerdefaultManager];
//判断doc下有没有数据库,没有的话就拷贝过去。
if ([fm fileExistsAtPath:sqlFilePath]==NO) {
NSError *error=nil;
if ([fm copyItemAtPath:orignFilePath toPath:sqlFilePath error:&error]==NO) {
NSLog(@"open database error %@",[error localizedDescription]);
return nil;
}
}
sqlite3_open([sqlFilePath UTF8String], &dbPoint);
returndbPoint;
}
+(void)closeDB{
if (dbPoint) {
sqlite3_close(dbPoint);
}
}
@end
+(NSMutableArray *)findAll{
NSMutableArray *stuArray;//存储查询到的结果。
sqlite3 *sqlite =[DataBase openDB];//打开数据库。
sqlite3_stmt *stmt=nil;
stuArray =[[NSMutableArray alloc]init];
if (sqlite3_prepare_v2(sqlite, "select * from stu", -1, &stmt, NULL)==SQLITE_OK) {//调用预处理函数将sql语句赋值给stmt对象。
while (sqlite3_step(stmt)==SQLITE_ROW) {//有可用的行数据。
int sid=sqlite3_column_int(stmt, 0);
NSString *name=[NSStringstringWithUTF8String:(constchar *) sqlite3_column_text(stmt, 1)];
NSString *detailText=[NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 2)];
NSString *tel=[NSStringstringWithUTF8String:(constchar *) sqlite3_column_text(stmt, 3)];
//获取二进制数据的长度。
int length=sqlite3_column_bytes(stmt, 4);
NSData *data=[NSData dataWithBytes:sqlite3_column_blob(stmt, 4) length:length];//将二进制对象转换为nsdata对象。
Student *stu=[[Student alloc]init];
stu.sid=sid;
stu.name=name;
stu.detailText=detailText;
stu.tel=tel;
stu.image=data;
[stuArray addObject:stu];
[stu release];
}
}
sqlite3_finalize(stmt);//回收stmt对象。
return [stuArray autorelease];//返回包含学生信息的数组。
}
+(Student *)findByName:(NSString *)name{
Student *stu;
sqlite3 *sqlite =[DataBase openDB];//打开数据库。
sqlite3_stmt *stmt=nil;
if (sqlite3_prepare_v2(sqlite, "select * from stu where name=?", -1, &stmt, nil)==SQLITE_OK) {//调用预处理函数将sql语句赋值给stmt对象。
//绑定?占位符。
sqlite3_bind_text(stmt, 1, [name UTF8String], -1, nil);
while (sqlite3_step(stmt)==SQLITE_ROW) {//有可用的行数据。
int sid=sqlite3_column_int(stmt, 0);
NSString *name=[NSStringstringWithUTF8String:(constchar *) sqlite3_column_text(stmt, 1)];
NSString *detailText=[NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 2)];
NSString *tel=[NSStringstringWithUTF8String:(constchar *) sqlite3_column_text(stmt, 3)];
//获取二进制数据的长度。
int length=sqlite3_column_bytes(stmt, 4);
NSData *data=[NSData dataWithBytes:sqlite3_column_blob(stmt, 4) length:length];//将二进制对象转换为nsdata对象。
stu=[[Student alloc]init];//这里千万不要在不小心创建一个stu了。
stu.sid=sid;
stu.name=name;
stu.detailText=detailText;
stu.tel=tel;
stu.image=data;
}
}
sqlite3_finalize(stmt);//回收stmt对象。
return [stu autorelease];//返回包含学生信息的数组。
}
+(void)deleteBySid:(int)sid{
sqlite3 *sqlite =[DataBase openDB];//打开数据库。
sqlite3_stmt *stmt=nil;
NSLog(@"shan chu l y xia ");
if (sqlite3_prepare_v2(sqlite, "delete from stu where sid=?", -1, &stmt, NULL)==SQLITE_OK) {//调用预处理函数将sql语句赋值给stmt对象。
//绑定?占位符。
sqlite3_bind_int(stmt, 1, sid);//1表示第几个问号。
if (sqlite3_step(stmt) == SQLITE_ERROR) {
NSLog(@"Error:failed in stu deleteBySid database");
}
else{
NSLog(@"successed in stu deleteBySid database");
}
}
sqlite3_finalize(stmt);
}
+(void)insertStu:(Student *)stu{
sqlite3 *sqlite=[DataBase openDB];
sqlite3_stmt *stmt=nil;
if (sqlite3_prepare_v2(sqlite, "insert into stu(name,detailText,tel,image) values(?,?,?,?)", -1, &stmt, NULL)==SQLITE_OK) {
// sqlite3_bind_int(stmt, 1, stu.sid);
sqlite3_bind_text(stmt, 1, [stu.name UTF8String] , -1, nil);
sqlite3_bind_text(stmt, 2, [stu.detailText UTF8String], -1, nil);
sqlite3_bind_text(stmt, 3, [stu.tel UTF8String], -1, nil);
sqlite3_bind_blob(stmt, 4, [stu.image bytes], [stu.image length], nil);
if (sqlite3_step(stmt)==SQLITE_ERROR) {
NSLog(@"insert error");
}
}
sqlite3_finalize(stmt);
}
//+(void) insetStudent:(NSString *) name andage:(int)age andimage:(NSData *)image{
// sqlite3 *sqlite=[DataBase openDB];
// sqlite3_stmt *stmt=nil; //定义sql语句对象
// int flag=sqlite3_prepare_v2(sqlite, "inset into tblstudent(stuName,stuAge,stuImage) values(?,?,?)", -1, &stmt, nil); //调用预处理函数将sql语句"select *from stdent"赋值给stmt对象,-1为自动计算方法"select *from stdent where sid=?"的长度,nil为回调函数
// if (flag==SQLITE_OK) {
// sqlite3_bind_text(stmt, 1, [name UTF8String], -1, nil); //[name UTF8String]是把nsstring转换为cstring型,-1是自动长度
// sqlite3_bind_int(stmt, 2, age); //给问号占位符赋值,sqlite3_prepare_v2中第一个?赋值参数sid
// // int flag=sqlite3_
// sqlite3_bind_blob(stmt, 3, [image bytes], [image length], nil);
// if (sqlite3_step(stmt)==SQLITE_ERROR) { //执行后判断是否错误
// NSLog(@"insert error");
// }
// }
// sqlite3_finalize(stmt);
//}
+(void)updateStu:(Student *)stu{
sqlite3 *sqlite=[DataBase openDB];
sqlite3_stmt *stmt=nil;
if (sqlite3_prepare_v2(sqlite, "update stu set name=?,detailText=?,tel=?,image=? where sid=?", -1, &stmt, NULL)==SQLITE_OK) {
sqlite3_bind_int(stmt, 5, stu.sid);
sqlite3_bind_text(stmt, 1, [stu.name UTF8String] , -1, nil);
sqlite3_bind_text(stmt, 2, [stu.detailText UTF8String] , -1, nil);
sqlite3_bind_text(stmt, 3, [stu.tel UTF8String] , -1, nil);
sqlite3_bind_blob(stmt, 4, [stu.image bytes], [stu.image length], nil);
if (sqlite3_step(stmt)==SQLITE_ERROR) {
NSLog(@"update error");
}
}
sqlite3_finalize(stmt);
}
+(NSMutableArray *)findAll{
NSMutableArray *stuArray;
sqlite3 *sqlite=[DataBase openDB];
sqlite3_stmt *stmt=nil;
stuArray =[[NSMutableArray alloc]init];
if (sqlite3_prepare_v2(sqlite, "select * from student", -1, &stmt, NULL)==SQLITE_OK) {
while (sqlite3_step(stmt)==SQLITE_ROW) {//有可用的行数据。
int sid=sqlite3_column_int(stmt, 0);
int sage=sqlite3_column_int(stmt, 1);
NSString *sname=[NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 2)];//注意这里是值不能为空所以,添加数据库时注意了,否则查询的时候会出错。
//获取二进制数据的长度。
int length=sqlite3_column_bytes(stmt, 3);
NSData *data=[NSData dataWithBytes:sqlite3_column_blob(stmt, 3) length:length];//将二进制对象转换为nsdata对象。
Student *stu=[[Student alloc]init];
stu.sid=sid;
stu.sage=sage;
stu.sname=sname;
stu.simage=data;
[stuArray addObject:stu];
[stu release];
}
}
sqlite3_finalize(stmt);//回收stmt对象。
return [stuArray autorelease];//返回包含学生信息的数组。
}
+(BOOL)insert:(Student *)student{
sqlite3 *sqlite=[DataBase openDB];
sqlite3_stmt *stmt=nil;
if (sqlite3_prepare_v2(sqlite, "insert into student(sage,sname,simage) values(?,?,?)", -1, &stmt, NULL)==SQLITE_OK) {
sqlite3_bind_int(stmt, 1, student.sage);
sqlite3_bind_text(stmt, 2, [student.sname UTF8String] , -1, nil);
sqlite3_bind_blob(stmt, 3, [student.simage bytes], [student.simage length], nil);
if (sqlite3_step(stmt)==SQLITE_ERROR) {
NSLog(@"insert error");
}
return YES;
}
else{
return NO;
}
sqlite3_finalize(stmt);
}
#import "Stu.h"
#import "DataBase.h"
#import <sqlite3.h>
@implementation Stu
@synthesize sid,sname,simage;
+(NSMutableArray *)findAll{
NSMutableArray *stuArray;//存储查询到的结果。
sqlite3 *sqlite =[DataBase openDB];//打开数据库。
sqlite3_stmt *stmt=nil;
if (sqlite3_prepare_v2(sqlite, "select * from stu", -1, &stmt, NULL)==SQLITE_OK) {//调用预处理函数将sql语句赋值给stmt对象。
stuArray =[[NSMutableArray alloc]init];
while (sqlite3_step(stmt)==SQLITE_ROW) {//有可用的行数据。
int sid=sqlite3_column_int(stmt, 0);
NSString *sname=[NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 1)];
//获取二进制数据的长度。
int length=sqlite3_column_bytes(stmt, 2);
NSData *data=[NSData dataWithBytes:sqlite3_column_blob(stmt, 2) length:length];//将二进制对象转换为nsdata对象。
Stu *stu=[[Stu alloc]init];
stu.sid=sid;
stu.sname=sname;
stu.simage=data;
[stuArray addObject:stu];
[stu release];
}
}
sqlite3_finalize(stmt);//回收stmt对象。
return [stuArray autorelease];//返回包含学生信息的数组。
}
+(Stu *)findBySid:(int)sid{
Stu *stu;
sqlite3 *sqlite =[DataBase openDB];//打开数据库。
sqlite3_stmt *stmt=nil;
if (sqlite3_prepare_v2(sqlite, "select * from stu where sid=?", -1, &stmt, nil)==SQLITE_OK) {//调用预处理函数将sql语句赋值给stmt对象。
//绑定?占位符。
sqlite3_bind_int(stmt, 1, sid);//1表示第几个问号。
while (sqlite3_step(stmt)==SQLITE_ROW) {//有可用的行数据。
int sid=sqlite3_column_int(stmt, 0);
NSString *sname=[NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 1)];
//获取二进制数据的长度。
int length=sqlite3_column_bytes(stmt, 2);
NSData *data=[NSData dataWithBytes:sqlite3_column_blob(stmt, 2) length:length];//将二进制对象转换为nsdata对象。
stu=[[Stu alloc]init];//这里千万不要在不小心创建一个stu了。
stu.sid=sid;
stu.sname=sname;
stu.simage=data;
NSLog(@"stu.sname==%@",stu.sname);
}
}
sqlite3_finalize(stmt);//回收stmt对象。
return [stu autorelease];//返回包含学生信息的数组。
}
+(void)deleteBySid:(int)sid{
sqlite3 *sqlite =[DataBase openDB];//打开数据库。
sqlite3_stmt *stmt=nil;
NSLog(@"shan chu l y xia ");
if (sqlite3_prepare_v2(sqlite, "delete from stu where sid=?", -1, &stmt, NULL)==SQLITE_OK) {//调用预处理函数将sql语句赋值给stmt对象。、、删除的时候一定不能有*。
//绑定?占位符。
sqlite3_bind_int(stmt, 1, sid);//1表示第几个问号。
if (sqlite3_step(stmt) == SQLITE_ERROR) {
NSLog(@"Error:failed in stu deleteBySid database");
}
else{
NSLog(@"successed in stu deleteBySid database");
}
}
sqlite3_finalize(stmt);
}
+(void)insertStu:(NSString *)sname{
sqlite3 *sqlite=[DataBase openDB];
sqlite3_stmt *stmt=nil;
if (sqlite3_prepare_v2(sqlite, "insert into stu(sname) values(?)", -1, &stmt, NULL)==SQLITE_OK) {
sqlite3_bind_text(stmt, 1, [sname UTF8String] , -1, nil);
if (sqlite3_step(stmt)==SQLITE_ERROR) {
NSLog(@"insert error");
}
}
sqlite3_finalize(stmt);
}
+(void)updateStu:(Stu *)stu{
sqlite3 *sqlite=[DataBase openDB];
sqlite3_stmt *stmt=nil;
if (sqlite3_prepare_v2(sqlite, "update stu set sname=? where sid=?", -1, &stmt, NULL)==SQLITE_OK) {
sqlite3_bind_int(stmt, 2, stu.sid);
sqlite3_bind_text(stmt, 1, [stu.sname UTF8String] , -1, nil);
if (sqlite3_step(stmt)==SQLITE_ERROR) {
NSLog(@"update error");
}
}
sqlite3_finalize(stmt);
}
@end
相关推荐
IOS sqlite UI界面 增删改查 对sqlite简单封装,并用UI界面完成对用户数据的增删改查,将数据库表封装成对象,通过操作对象来操作数据库
实现了ios对于联系人信息的增加,删除,查询。同时可以调用AddressBook查看。
iOS使用数据库实现增删改查,最基本的数据库语言。
如何使用CoreData实现增删改查,存储数据方便
ios编程:实现二叉排序树增删改查。 开发环境:windows下codeblocks。
简单实现了对数据的增删改查,都有注释,另外我还写了一篇简书,特别详细,简单粗暴,是人都看懂~~~ 简书: http://www.jianshu.com/p/7c1ac5ce614b github: https://github.com/ty82885279/CoreData
改demo 实现了iOS里面的coredata的增删改查操作
使用CoreData实现对表的编辑,增删改查功能。使用起来比数据库方便。
fmdb本地数据库操作,增删改查
算是比较详细了,包括storyboard反向传值,喜欢学习的可以看看,后续还会更新有关coredata的使用,有不同意见可以留言,谢谢了!
1.我这份代码是参照JKDBModel完成的,我只是加上了一些注释,删除了UI部分代码。目的只是为了让想学习FMDB的人能省去百度的时间(反正我很多不懂的代码都是靠百度) ...具体的增删改查示例代码,在viewController.m中
主要为大家详细介绍了iOS CoreData 增删改查的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
iOS-基于FMDB的操作封装,模型对象的增删改查 详细使用介绍请参考:http://blog.csdn.net/u014220518/article/details/78189927
CoreData的简单用法,增删改查。由于是一个Demo所以也没怎么进行封装,就迁就着看,再以后的几篇关于CoreData的blog里,我会深入学习,并且最终会用block对他进行封装,争取用起来写更少的代码量。 CoreData让不...
demo意在帮助初步接触sqlite3的开发者更好的理解ios数据本地化 ...基本功能:本地数据的增删改查的简单操作。 主要步骤:1 加入libsqlite3库 2 创建sqlite管理类单例 3 在管理类创建管理数据接口
如何使用CoreData实现增删改查,存储数据方便,修正了代码中SDWebImage的错误 作者文章地址:http://blog.csdn.net/rhljiayou/article/details/18037729
对sqlite的基本操作进行封装,可以自动生成拼接SQL语句,自动绑定数据并执行,简化了数据库的四项主要操作,减少代码量。 使用的大致步骤 导入附件中的文件(需要libsqlite3.0.tbd的支持) 在WDGDatabaseTool.h...
对sqlite的基本操作进行封装,可以自动生成拼接SQL语句,自动绑定数据并执行,简化了数据库的四项主要操作,减少代码量。 使用的大致步骤 导入附件中的文件(需要libsqlite3.0.tbd的支持) 在WDGDatabaseTool.h...
对sqlite的基本操作进行封装,可以自动生成拼接SQL语句,自动绑定数据并执行,简化了数据库的四项主要操作,减少代码量。 使用的大致步骤 导入附件中的文件(需要libsqlite3.0.tbd的支持) 在WDGDatabaseTool.h...
支持实现封装Sqlite常用的增删改查功能,然后实现给FMDB再加一层,封装Sqlite常用的增删改查,主要针对单表操作。项目中包括一个TODO的简单示例,包括对sqlite的增删改查操作。建议结合作者的另一个项目peaksqlite-...