`
zjjzmw1
  • 浏览: 1366453 次
  • 性别: Icon_minigender_1
  • 来自: 开封
社区版块
存档分类
最新评论

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=[[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, 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=[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, 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联系人信息增删改查

    在iOS平台上,与联系人交互是一...总之,"ios联系人信息增删改查"涉及的是iOS平台上的联系人管理,主要依赖于AddressBook框架。掌握这一技术,开发者可以创建各种应用程序,帮助用户高效地管理和操作他们的联系人数据。

    IOS sqlite 完成增删改查

    为了实现增删改查的功能,我们需要编写以下关键方法: 1. **添加**:创建一个新的对象,设置其属性,然后调用SQLite管理类的`insertUser:`方法,将对象转换为SQL语句并执行。 2. **修改**:获取选中对象,更新其...

    IOS之分析网易新闻存储数据 CoreData的使用 增删改查

    本篇文章将深入探讨如何在iOS应用中使用CoreData进行数据的增删改查操作,并结合实例——分析网易新闻的存储数据来阐述其工作原理。 首先,让我们了解CoreData的基本概念。CoreData不是一个数据库,而是一个对象图...

    iOS使用数据库实现增删改查

    本教程将深入探讨如何在iOS中使用SQLite数据库来实现基本的增删改查(CRUD)操作。 SQLite是一款轻量级、嵌入式的、关系型数据库系统,它无需单独的服务器进程,可以直接在应用中使用。对于iOS开发者来说,SQLite是...

    ios-CoreData 增删改查.zip

    简单实现了对数据的增删改查,都有注释,另外我还写了一篇简书,特别详细,简单粗暴,是人都看懂~~~ 简书: http://www.jianshu.com/p/7c1ac5ce614b github: https://github.com/ty82885279/CoreData

    二叉排序树增删改查

    总的来说,理解和掌握二叉排序树的增删改查操作对于iOS开发者来说是非常有益的,它能帮助优化数据存储和检索,提高程序的效率。通过实践和调试,你可以深入理解这些基本操作背后的逻辑,这对于提升编程技能和解决...

    iOS CoreData 增 删 改 查 demo

    本教程通过一个简单的"增删改查"(CRUD)DEMO,深入讲解如何利用CoreData在iOS应用中进行数据操作。 一、CoreData基本概念 1. Managed Object Context(MOC):是CoreData的主要工作区,负责处理数据对象的创建、...

    ios-CoreData实现增删改查.zip

    在iOS开发中,Core Data是苹果提供的一种数据管理框架,用于处理应用程序的数据模型层。它不仅简化了数据存储,还...通过学习和掌握如何在iOS项目中使用Core Data进行增删改查,你可以创建更加健壮且易于维护的应用。

    CoreData增删改查

    在这个"CoreData增删改查"的主题中,我们将深入探讨如何使用CoreData进行基本的数据操作,包括添加(增)、删除(删)、修改(改)和查询(查)。 1. **增(Add)**: 当我们需要在应用中存储新数据时,首先创建一...

    sqllite登陆注册 sqlite的增删改查操作(转)

    SQLite是一种轻量级的、开源的、自包含的数据库引擎,常用于移动设备或嵌入式系统的本地...通过研究和理解这段代码,你可以掌握如何在Android应用中使用SQLite进行数据管理,实现用户注册登录以及数据的增删改查功能。

    Bmob 增删改查

    **Bmob 增删改查详解** Bmob是一款强大的后端云服务,它为开发者提供了便捷的数据存储、用户管理、文件存储等服务,极大地简化了移动应用开发过程中的后端构建工作。在这个主题中,我们将深入探讨如何利用Bmob进行...

    fmdb增删改查

    FMDB是iOS和macOS平台上一个非常流行的SQLite数据库管理库,它是用Objective-C编写的,提供了简单易用的API来处理SQLite数据库的各种操作,包括增、删、改、查(CRUD)等基本功能。在iOS应用开发中,FMDB通常用于...

    ios-Coredata storyboard(增删改查).zip

    算是比较详细了,包括storyboard反向传值,喜欢学习的可以看看,后续还会更新有关coredata的使用,有不同意见可以留言,谢谢了!

    CoreData增删改查的简单使用

    在这个“CoreData增删改查的简单使用”主题中,我们将深入探讨如何利用CoreData进行基本的数据操作,包括添加(Create)、读取(Read)、更新(Update)和删除(Delete)数据。 1. **创建(Create)**: 在...

    ios-Co增删改查.zip

    "ios-Co增删改查.zip"这个压缩包文件聚焦于两个核心概念:数据持久化和数据升级。下面我们将深入探讨这两个主题。 首先,我们来看数据持久化。在iOS应用中,数据持久化是将应用程序运行时的数据存储到非易失性存储...

    ios-数据库增删改查操作的封装.zip

    1.我这份代码是参照JKDBModel完成的,我只是加上了一些注释,删除了UI部分代码。目的只是为了让想学习FMDB的人能省去百度的时间(反正我很多不懂的代码都是靠百度) ...具体的增删改查示例代码,在viewController.m中

    CoreData增删改查Demo

    CoreData的简单用法,增删改查。由于是一个Demo所以也没怎么进行封装,就迁就着看,再以后的几篇关于CoreData的blog里,我会深入学习,并且最终会用block对他进行封装,争取用起来写更少的代码量。 CoreData让不...

    ios-sqlite3增删改查Demo.zip

    demo意在帮助初步接触sqlite3的开发者更好的理解ios数据本地化 ...基本功能:本地数据的增删改查的简单操作。 主要步骤:1 加入libsqlite3库 2 创建sqlite管理类单例 3 在管理类创建管理数据接口

    ios-CoreData实现的增删改查.zip

    本教程将深入探讨如何利用Core Data在iOS应用中实现数据的增删改查操作。 首先,让我们了解一下Core Data的基本概念: 1. **实体(Entity)**:类似于数据库中的表,用于定义数据模型。 2. **属性(Attribute)**...

    iOS-基于FMDB的操作封装,模型对象的增删改查

    本篇文章将深入探讨如何基于FMDB进行数据库操作的封装,并实现模型对象的增删改查功能。 首先,我们需要了解FMDB的基本用法。FMDB通过FMDatabase类来代表一个SQLite数据库,可以创建、打开和关闭数据库连接。...

Global site tag (gtag.js) - Google Analytics