iOS增删改查

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

 

猜你喜欢

转载自zhangmingwei.iteye.com/blog/1877201