iOS增删改查


#import "DataBase.h"


@implementation DataBase

//创建单例.

static sqlite3 *dbPoint=nil

+(sqlite3 *)openDB{

    if (dbPoint) {

        return dbPoint;

    }

    //目标路径。

    NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectoryNSUserDomainMask,YES)objectAtIndex:0];

    NSLog(@"12312312321====%@",docPath);

    NSString *sqlFilePath=[docPath stringByAppendingPathComponent:@"lianxi2.sqlite"];

    //原始路径。

    NSString *orignFilePath=[[NSBundle mainBundle]pathForResource:@"lianxi2" ofType:@"sqlite"];

    //创建文件管理器。

    NSFileManager *fm=[NSFileManager defaultManager];

    //判断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);

    return dbPoint;

}

+(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=[NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 1)];

            NSString *detailText=[NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt,2)];

            NSString *tel=[NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 3)];

            //获取二进制数据的长度。

            int length=sqlite3_column_bytes(stmt, 4);

            NSData *data=[NSData dataWithBytes:sqlite3_column_blob(stmt, 4length: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], -1nil);

        while (sqlite3_step(stmt)==SQLITE_ROW) {//有可用的行数据。

            int sid=sqlite3_column_int(stmt, 0);

            NSString *name=[NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 1)];

            NSString *detailText=[NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt,2)];

            NSString *tel=[NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 3)];

            //获取二进制数据的长度。

            int length=sqlite3_column_bytes(stmt, 4);

            NSData *data=[NSData dataWithBytes:sqlite3_column_blob(stmt, 4length: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] , -1nil);

        sqlite3_bind_text(stmt, 2, [stu.detailText UTF8String], -1nil);

        sqlite3_bind_text(stmt, 3, [stu.tel UTF8String], -1nil);

        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] , -1nil);

        sqlite3_bind_text(stmt, 2, [stu.detailText UTF8String] , -1nil);

        sqlite3_bind_text(stmt, 3, [stu.tel UTF8String] , -1nil);

        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, 3length: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] , -1nil);

        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, 2length: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, 2length: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] , -1nil);

            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] , -1nil);

            if (sqlite3_step(stmt)==SQLITE_ERROR) {

                NSLog(@"update error");

            }

        }

        sqlite3_finalize(stmt);

}

@end


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值