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

相关推荐