iOS增删改查
#import"DataBase.h"
@implementationDataBase
//创建单例.
staticsqlite3*dbPoint=nil;
+(sqlite3*)openDB{
if(dbPoint){
returndbPoint;
}
//目标路径。
NSString*docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)objectAtIndex:0];
NSLog(@"12312312321====%@",docPath);
NSString*sqlFilePath=[docPathstringByAppendingPathComponent:@"lianxi2.sqlite"];
//原始路径。
NSString*orignFilePath=[[NSBundlemainBundle]pathForResource:@"lianxi2"ofType:@"sqlite"];
//创建文件管理器。
NSFileManager*fm=[NSFileManagerdefaultManager];
//判断doc下有没有数据库,没有的话就拷贝过去。
if([fmfileExistsAtPath:sqlFilePath]==NO){
NSError*error=nil;
if([fmcopyItemAtPath:orignFilePathtoPath:sqlFilePatherror:&error]==NO){
NSLog(@"opendatabaseerror%@",[errorlocalizedDescription]);
returnnil;
}
}
sqlite3_open([sqlFilePathUTF8String],&dbPoint);
returndbPoint;
}
+(void)closeDB{
if(dbPoint){
sqlite3_close(dbPoint);
}
}
@end
+(NSMutableArray*)findAll{
NSMutableArray*stuArray;//存储查询到的结果。
sqlite3*sqlite=[DataBaseopenDB];//打开数据库。
sqlite3_stmt*stmt=nil;
stuArray=[[NSMutableArrayalloc]init];
if(sqlite3_prepare_v2(sqlite,"select*fromstu",-1,&stmt,NULL)==SQLITE_OK){//调用预处理函数将sql语句赋值给stmt对象。
while(sqlite3_step(stmt)==SQLITE_ROW){//有可用的行数据。
intsid=sqlite3_column_int(stmt,0);
NSString*name=[NSStringstringWithUTF8String:(constchar*)sqlite3_column_text(stmt,1)];
NSString*detailText=[NSStringstringWithUTF8String:(constchar*)sqlite3_column_text(stmt,2)];
NSString*tel=[NSStringstringWithUTF8String:(constchar*)sqlite3_column_text(stmt,3)];
//获取二进制数据的长度。
intlength=sqlite3_column_bytes(stmt,4);
NSData*data=[NSDatadataWithBytes:sqlite3_column_blob(stmt,4)length:length];//将二进制对象转换为nsdata对象。
Student*stu=[[Studentalloc]init];
stu.sid=sid;
stu.name=name;
stu.detailText=detailText;
stu.tel=tel;
stu.image=data;
[stuArrayaddObject:stu];
[sturelease];
}
}
sqlite3_finalize(stmt);//回收stmt对象。
return[stuArrayautorelease];//返回包含学生信息的数组。
}
+(Student*)findByName:(NSString*)name{
Student*stu;
sqlite3*sqlite=[DataBaseopenDB];//打开数据库。
sqlite3_stmt*stmt=nil;
if(sqlite3_prepare_v2(sqlite,"select*fromstuwherename=?",-1,&stmt,nil)==SQLITE_OK){//调用预处理函数将sql语句赋值给stmt对象。
//绑定?占位符。
sqlite3_bind_text(stmt,1,[nameUTF8String],-1,nil);
while(sqlite3_step(stmt)==SQLITE_ROW){//有可用的行数据。
intsid=sqlite3_column_int(stmt,0);
NSString*name=[NSStringstringWithUTF8String:(constchar*)sqlite3_column_text(stmt,1)];
NSString*detailText=[NSStringstringWithUTF8String:(constchar*)sqlite3_column_text(stmt,2)];
NSString*tel=[NSStringstringWithUTF8String:(constchar*)sqlite3_column_text(stmt,3)];
//获取二进制数据的长度。
intlength=sqlite3_column_bytes(stmt,4);
NSData*data=[NSDatadataWithBytes:sqlite3_column_blob(stmt,4)length:length];//将二进制对象转换为nsdata对象。
stu=[[Studentalloc]init];//这里千万不要在不小心创建一个stu了。
stu.sid=sid;
stu.name=name;
stu.detailText=detailText;
stu.tel=tel;
stu.image=data;
}
}
sqlite3_finalize(stmt);//回收stmt对象。
return[stuautorelease];//返回包含学生信息的数组。
}
+(void)deleteBySid:(int)sid{
sqlite3*sqlite=[DataBaseopenDB];//打开数据库。
sqlite3_stmt*stmt=nil;
NSLog(@"shanchulyxia");
if(sqlite3_prepare_v2(sqlite,"deletefromstuwheresid=?",-1,&stmt,NULL)==SQLITE_OK){//调用预处理函数将sql语句赋值给stmt对象。
//绑定?占位符。
sqlite3_bind_int(stmt,1,sid);//1表示第几个问号。
if(sqlite3_step(stmt)==SQLITE_ERROR){
NSLog(@"Error:failedinstudeleteBySiddatabase");
}
else{
NSLog(@"successedinstudeleteBySiddatabase");
}
}
sqlite3_finalize(stmt);
}
+(void)insertStu:(Student*)stu{
sqlite3*sqlite=[DataBaseopenDB];
sqlite3_stmt*stmt=nil;
if(sqlite3_prepare_v2(sqlite,"insertintostu(name,detailText,tel,image)values(?,?,?,?)",-1,&stmt,NULL)==SQLITE_OK){
//sqlite3_bind_int(stmt,1,stu.sid);
sqlite3_bind_text(stmt,1,[stu.nameUTF8String],-1,nil);
sqlite3_bind_text(stmt,2,[stu.detailTextUTF8String],-1,nil);
sqlite3_bind_text(stmt,3,[stu.telUTF8String],-1,nil);
sqlite3_bind_blob(stmt,4,[stu.imagebytes],[stu.imagelength],nil);
if(sqlite3_step(stmt)==SQLITE_ERROR){
NSLog(@"inserterror");
}
}
sqlite3_finalize(stmt);
}
//+(void)insetStudent:(NSString*)nameandage:(int)ageandimage:(NSData*)image{
//sqlite3*sqlite=[DataBaseopenDB];
//sqlite3_stmt*stmt=nil;//定义sql语句对象
//intflag=sqlite3_prepare_v2(sqlite,"insetintotblstudent(stuName,stuAge,stuImage)values(?,?,?)",-1,&stmt,nil);//调用预处理函数将sql语句"select*fromstdent"赋值给stmt对象,-1为自动计算方法"select*fromstdentwheresid=?"的长度,nil为回调函数
//if(flag==SQLITE_OK){
//sqlite3_bind_text(stmt,1,[nameUTF8String],-1,nil);//[nameUTF8String]是把nsstring转换为cstring型,-1是自动长度
//sqlite3_bind_int(stmt,2,age);//给问号占位符赋值,sqlite3_prepare_v2中第一个?赋值参数sid
////intflag=sqlite3_
//sqlite3_bind_blob(stmt,3,[imagebytes],[imagelength],nil);
//if(sqlite3_step(stmt)==SQLITE_ERROR){//执行后判断是否错误
//NSLog(@"inserterror");
//}
//}
//sqlite3_finalize(stmt);
//}
+(void)updateStu:(Student*)stu{
sqlite3*sqlite=[DataBaseopenDB];
sqlite3_stmt*stmt=nil;
if(sqlite3_prepare_v2(sqlite,"updatestusetname=?,detailText=?,tel=?,image=?wheresid=?",-1,&stmt,NULL)==SQLITE_OK){
sqlite3_bind_int(stmt,5,stu.sid);
sqlite3_bind_text(stmt,1,[stu.nameUTF8String],-1,nil);
sqlite3_bind_text(stmt,2,[stu.detailTextUTF8String],-1,nil);
sqlite3_bind_text(stmt,3,[stu.telUTF8String],-1,nil);
sqlite3_bind_blob(stmt,4,[stu.imagebytes],[stu.imagelength],nil);
if(sqlite3_step(stmt)==SQLITE_ERROR){
NSLog(@"updateerror");
}
}
sqlite3_finalize(stmt);
}
+(NSMutableArray*)findAll{
NSMutableArray*stuArray;
sqlite3*sqlite=[DataBaseopenDB];
sqlite3_stmt*stmt=nil;
stuArray=[[NSMutableArrayalloc]init];
if(sqlite3_prepare_v2(sqlite,"select*fromstudent",-1,&stmt,NULL)==SQLITE_OK){
while(sqlite3_step(stmt)==SQLITE_ROW){//有可用的行数据。
intsid=sqlite3_column_int(stmt,0);
intsage=sqlite3_column_int(stmt,1);
NSString*sname=[NSStringstringWithUTF8String:(constchar*)sqlite3_column_text(stmt,2)];//注意这里是值不能为空所以,添加数据库时注意了,否则查询的时候会出错。
//获取二进制数据的长度。
intlength=sqlite3_column_bytes(stmt,3);
NSData*data=[NSDatadataWithBytes:sqlite3_column_blob(stmt,3)length:length];//将二进制对象转换为nsdata对象。
Student*stu=[[Studentalloc]init];
stu.sid=sid;
stu.sage=sage;
stu.sname=sname;
stu.simage=data;
[stuArrayaddObject:stu];
[sturelease];
}
}
sqlite3_finalize(stmt);//回收stmt对象。
return[stuArrayautorelease];//返回包含学生信息的数组。
}
+(BOOL)insert:(Student*)student{
sqlite3*sqlite=[DataBaseopenDB];
sqlite3_stmt*stmt=nil;
if(sqlite3_prepare_v2(sqlite,"insertintostudent(sage,sname,simage)values(?,?,?)",-1,&stmt,NULL)==SQLITE_OK){
sqlite3_bind_int(stmt,1,student.sage);
sqlite3_bind_text(stmt,2,[student.snameUTF8String],-1,nil);
sqlite3_bind_blob(stmt,3,[student.simagebytes],[student.simagelength],nil);
if(sqlite3_step(stmt)==SQLITE_ERROR){
NSLog(@"inserterror");
}
returnYES;
}
else{
returnNO;
}
sqlite3_finalize(stmt);
}
#import"Stu.h"
#import"DataBase.h"
#import<sqlite3.h>
@implementationStu
@synthesizesid,sname,simage;
+(NSMutableArray*)findAll{
NSMutableArray*stuArray;//存储查询到的结果。
sqlite3*sqlite=[DataBaseopenDB];//打开数据库。
sqlite3_stmt*stmt=nil;
if(sqlite3_prepare_v2(sqlite,"select*fromstu",-1,&stmt,NULL)==SQLITE_OK){//调用预处理函数将sql语句赋值给stmt对象。
stuArray=[[NSMutableArrayalloc]init];
while(sqlite3_step(stmt)==SQLITE_ROW){//有可用的行数据。
intsid=sqlite3_column_int(stmt,0);
NSString*sname=[NSStringstringWithUTF8String:(constchar*)sqlite3_column_text(stmt,1)];
//获取二进制数据的长度。
intlength=sqlite3_column_bytes(stmt,2);
NSData*data=[NSDatadataWithBytes:sqlite3_column_blob(stmt,2)length:length];//将二进制对象转换为nsdata对象。
Stu*stu=[[Stualloc]init];
stu.sid=sid;
stu.sname=sname;
stu.simage=data;
[stuArrayaddObject:stu];
[sturelease];
}
}
sqlite3_finalize(stmt);//回收stmt对象。
return[stuArrayautorelease];//返回包含学生信息的数组。
}
+(Stu*)findBySid:(int)sid{
Stu*stu;
sqlite3*sqlite=[DataBaseopenDB];//打开数据库。
sqlite3_stmt*stmt=nil;
if(sqlite3_prepare_v2(sqlite,"select*fromstuwheresid=?",-1,&stmt,nil)==SQLITE_OK){//调用预处理函数将sql语句赋值给stmt对象。
//绑定?占位符。
sqlite3_bind_int(stmt,1,sid);//1表示第几个问号。
while(sqlite3_step(stmt)==SQLITE_ROW){//有可用的行数据。
intsid=sqlite3_column_int(stmt,0);
NSString*sname=[NSStringstringWithUTF8String:(constchar*)sqlite3_column_text(stmt,1)];
//获取二进制数据的长度。
intlength=sqlite3_column_bytes(stmt,2);
NSData*data=[NSDatadataWithBytes:sqlite3_column_blob(stmt,2)length:length];//将二进制对象转换为nsdata对象。
stu=[[Stualloc]init];//这里千万不要在不小心创建一个stu了。
stu.sid=sid;
stu.sname=sname;
stu.simage=data;
NSLog(@"stu.sname==%@",stu.sname);
}
}
sqlite3_finalize(stmt);//回收stmt对象。
return[stuautorelease];//返回包含学生信息的数组。
}
+(void)deleteBySid:(int)sid{
sqlite3*sqlite=[DataBaseopenDB];//打开数据库。
sqlite3_stmt*stmt=nil;
NSLog(@"shanchulyxia");
if(sqlite3_prepare_v2(sqlite,"deletefromstuwheresid=?",-1,&stmt,NULL)==SQLITE_OK){//调用预处理函数将sql语句赋值给stmt对象。、、删除的时候一定不能有*。
//绑定?占位符。
sqlite3_bind_int(stmt,1,sid);//1表示第几个问号。
if(sqlite3_step(stmt)==SQLITE_ERROR){
NSLog(@"Error:failedinstudeleteBySiddatabase");
}
else{
NSLog(@"successedinstudeleteBySiddatabase");
}
}
sqlite3_finalize(stmt);
}
+(void)insertStu:(NSString*)sname{
sqlite3*sqlite=[DataBaseopenDB];
sqlite3_stmt*stmt=nil;
if(sqlite3_prepare_v2(sqlite,"insertintostu(sname)values(?)",-1,&stmt,NULL)==SQLITE_OK){
sqlite3_bind_text(stmt,1,[snameUTF8String],-1,nil);
if(sqlite3_step(stmt)==SQLITE_ERROR){
NSLog(@"inserterror");
}
}
sqlite3_finalize(stmt);
}
+(void)updateStu:(Stu*)stu{
sqlite3*sqlite=[DataBaseopenDB];
sqlite3_stmt*stmt=nil;
if(sqlite3_prepare_v2(sqlite,"updatestusetsname=?wheresid=?",-1,&stmt,NULL)==SQLITE_OK){
sqlite3_bind_int(stmt,2,stu.sid);
sqlite3_bind_text(stmt,1,[stu.snameUTF8String],-1,nil);
if(sqlite3_step(stmt)==SQLITE_ERROR){
NSLog(@"updateerror");
}
}
sqlite3_finalize(stmt);
}
@end