SQLite数据库


准备工作:引入libsqlite3.0.dylib框架



先建立一个Student类

声明:

@property(nonatomic,copy)NSString *name;
@property(nonatomic,copy)NSString *sex;
@property(nonatomic,copy)NSString *age;

建立SQLite工具类DataBaseHandle

#import <Foundation/Foundation.h>
@class Student;
@interface DataBaseHandle : NSObject


+(DataBaseHandle *)sharDB;

//获取documents路径
-(NSString *)documentsPath;

//打开数据库
-(void)openDB;

//关闭数据库
-(void)closeDB;
//创建表
-(void)createTable;
//插入信息
-(void)insertStuden:(Student *)stu;
//修改信息
-(void)updateMessage;
//删除信息
-(void)deleteMessage;
//查找全部
-(void)selectAllStudent;
//条件查找
-(void)selectWithSex:(NSString *)sex;



@end

实现 .m

#import "DataBaseHandle.h"
#import <sqlite3.h>
#import "Student.h"
static DataBaseHandle *database=nil;
@implementation DataBaseHandle

#pragma mark 实现单例
+(DataBaseHandle *)sharDB{

    if (nil==database) {
        database=[[DataBaseHandle alloc] init];
        
    }
    return database;

}


-(NSString *)documentsPath{

    NSString *documentsPath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
    
    return documentsPath;

}

//在操作数据库之前,引入框架

//声明一个数据库的对象
static sqlite3 *db=nil;

#pragma mark 打开数据库
-(void)openDB{

    if (nil==db) {
        //拼接数据库存放路径
        NSString *dbPath=[[self documentsPath]stringByAppendingString:@"/student.sqlite"];
        //根据路径打开数据库
        //如果该路径下没有数据库就自动创建一个
        
        //打开数据库
      int result= sqlite3_open(dbPath.UTF8String, &db);
        //判断是否执行成功
        if (result==SQLITE_OK) {
           
            NSLog(@"数据库打开成功");
        }
        else{
            NSLog(@"数据库打开失败");
        
        }
    }


}


//关闭数据库
-(void)closeDB{

    //执行数据库关闭
   int result= sqlite3_close(db);

    if (result==SQLITE_OK) {
        //如果关闭成功,置为nil
        db=nil;
        NSLog(@"数据库关闭成功");
        
    }
    else{
        NSLog(@"数据库关闭失败");
    
    }
}
#pragma mark 创建表
-(void)createTable{

    //要创建表,就要使用sql语句
    //sql语句在这是以字符串的形式存在的
    NSString *createString=@"CREATE TABLE IF NOT EXISTS student (sid INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , sname TEXT, ssex TEXT, sage TEXT)";

    //执行sql语句
  int result=  sqlite3_exec(db, createString.UTF8String, NULL, NULL, NULL);
    if (result ==SQLITE_OK) {
        NSLog(@"建表成功");
    }else{
        NSLog(@"建表失败");
    }
  
}

#pragma mark 插入数据
-(void)insertStuden:(Student *)stu{

    //准备插入语句
    NSString *insertString=[NSString stringWithFormat:@"INSERT INTO student (sname,ssex,sage) VALUES ('%@','%@','%@')",stu.name,stu.sex,stu.age];

    //执行语句
    int result=  sqlite3_exec(db, insertString.UTF8String, NULL, NULL, NULL);
    if (result ==SQLITE_OK) {
        NSLog(@"插入成功");
    }else{
        NSLog(@"插入失败");
    }

}

#pragma mark 修改数据

-(void)updateMessage{

    //准备修改sql语句字符串
    NSString *updateString=@"UPDATE student SET sage = '95' ,sname='陈贵阳' WHERE  sid = 2";

    int result= sqlite3_exec(db, updateString.UTF8String, NULL, NULL, NULL);
    
    if (result==SQLITE_OK) {
        NSLog(@"修改成功");
    }else{
        NSLog(@"修改失败");
    }
    
    

}
#pragma mark 删除数据

-(void)deleteMessage{

    //删除语句
    NSString *deleteString=@"delete from student where sid=1";
    int result=sqlite3_exec(db, deleteString.UTF8String, NULL, NULL, NULL);
    if (result==SQLITE_OK) {
        NSLog(@"删除成功");
    }else{
        NSLog(@"删除失败");
    }

}

#pragma mark 查找全部
-(void)selectAllStudent{

    //准备查找语句
    NSString *selectAll=@"SELECT * FROM student";
    //创建伴随指针
    sqlite3_stmt *stmt=nil;
    
    //预备执行
    int result=sqlite3_prepare(db, selectAll.UTF8String, -1, &stmt, NULL);
    if (result==SQLITE_OK) {
        //在没有查找完之前一直循环执行的
        while (sqlite3_step(stmt)==SQLITE_ROW) {
            //取出sid(第0列)
            NSInteger sid= sqlite3_column_int(stmt, 0);
            //取出sname(第1列)
            NSString *sname=[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
            //取出ssex(第2列)
             NSString *ssex=[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];
            //取出sage(第3列)
            NSString *sage=[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 3)];
            NSLog(@"sid:%d,sname:%@,ssex:%@,sage:%@",sid,sname,ssex,sage);
     
        }
        
        //关闭伴随指针
      sqlite3_finalize(stmt);
        
      NSLog(@"查询成功");
        
    }else{
        //结束伴随指针
        sqlite3_finalize(stmt);
        NSLog(@"查询失败");
    }

}

#pragma mark 按性别查找
-(void)selectWithSex:(NSString *)sex{

    //准备查找语句
    NSString *selectString=@"select * from student where ssex = ?";
    //伴随指针
    sqlite3_stmt *stmt=nil;
    //预执行
    int result=sqlite3_prepare(db, selectString.UTF8String, -1, &stmt, NULL);
    if (result==SQLITE_OK) {
        //绑定?的值
        //1代表第一个?和参数绑定
        sqlite3_bind_text(stmt, 1, sex.UTF8String, -1, NULL);
        
        while (sqlite3_step(stmt)==SQLITE_ROW) {
            
            NSInteger sid=sqlite3_column_int(stmt, 0);
            NSString *sname=[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
            NSString *ssex=[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];
            NSString *sage=[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 3)];
            NSLog(@"sid:%d,sname:%@,ssex%@,sage:%@",sid,sname,ssex,sage);
            
        }
        sqlite3_finalize(stmt);
        
        NSLog(@"查询成功");
    }else{
        //关闭伴随指针
        sqlite3_finalize(stmt);
        NSLog(@"查询失败");
    
    }
    

}




@end

控制器里边实现

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    //打开数据库
    [[DataBaseHandle sharDB] openDB];
   // NSLog(@"%@",NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES));
    //创建表
 // [[DataBaseHandle sharDB]createTable];
    //插入数据
//    Student *s1=[[Student alloc] init];
//    s1.name=@"王军1";
//    s1.sex=@"女";
//    s1.age=@"46";
//   [[DataBaseHandle sharDB] insertStuden:s1];
//    
    //修改数据
    //[[DataBaseHandle sharDB] updateMessage];
    
    //删除数据
   // [[DataBaseHandle sharDB] deleteMessage];
    
    //查找全部
  //  [[DataBaseHandle sharDB] selectAllStudent];
    
    //查询按性别
    [[DataBaseHandle sharDB] selectWithSex:@"女"];
    
    
    //关闭数据库
    [[DataBaseHandle sharDB] closeDB];
    
    
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值