sqlite3数据库的使用

在ios移动开发中用到本地存储数据的地方很多,网上有很多第三方的封装关于sqlite3,用的比较多的是FMDB,但是在我做项目的时候,刚开始用FMDB,后来一些简单的存储我就直接使用了sqlite3存储数据到本地,

在项目中因为很多地方都要使用到所以我将方法写在一个单例里,在使用的时候只调用接口。

下面是具体的代码示例

//单例声明部分
//
//  DataBaseHelp.h
//  S-MixControl
//
//  Created by chenq@kensence.com on 15/8/16.
//  Copyright © 2016年 KaiXingChuangDa. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

#import <sqlite3.h>
@interface DataBaseHelp : NSObject
@property (nonatomic ,strong)NSMutableArray *sqArray;

//创表
+(void)CreatTable;

//向表中插入数据 
/*
 *这里出入的元素根据你自己项目的实际需要可以随便的写入参数
 *
 */
+(void)InsertIntoTemp:(int)temp Type:(int)type Key:(NSString *)key Values:(NSString *)values;
//查询数据
+(NSArray *)SelectTemp:(int)temp Type:(int)type;
//删除数据
+(void)DeleteWithTemp:(int)temp type:(int)type Key:(NSString *)key;

@end

//单例实现部分
//
//  DataBaseHelp.m
//  S-MixControl
//
//  Created by chenq@kensence.com on 15/8/16.
//  Copyright © 2016年 KaiXingChuangDa. All rights reserved.
//

#define FILE_NAME @"database.sqlite"
#import "DataBaseHelp.h"
#import "SignalValue.h"
@implementation DataBaseHelp
static sqlite3 *db;

+(void)CreatTable
{


    //打开数据库
    //取到沙盒
    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    NSString *fileName = [doc stringByAppendingPathComponent:@"Name"];
    const char *CfileName = fileName.UTF8String;

    int result = sqlite3_open(CfileName, &db);
    if (result == SQLITE_OK) {
        NSLog(@"数据库打开成功");
        //创建表
        const char *sql = "CREATE TABLE IF NOT EXISTS t_name (id integer PRIMARY KEY AUTOINCREMENT,stemp integer NOT NULL , type integer NOT NULL , key text NOT NULL , svalue text NOT NULL);";
        char *erroMsg = NULL;
        sqlite3_exec(db, sql, NULL, NULL, &erroMsg);
        if (result == SQLITE_OK) {
            NSLog(@"创表成功");
        }else
        {
            NSLog(@"创建表失败");
        }
    }else
    {
        NSLog(@"打开数据库失败");
    }
}
+(void)InsertIntoTemp:(int)temp Type:(int)type Key:(NSString *)key Values:(NSString *)values
{

    NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_name (stemp,type,key,svalue) VALUES (%d,%d,'%@','%@');",temp,type,key,values];
    char *erroMsg = NULL;
    sqlite3_exec(db, sql.UTF8String, NULL, NULL, &erroMsg);
    if (erroMsg) {
        printf("插入失败%s",erroMsg);
    }else
    {
        NSLog(@"插入成功");
    }

}


+(NSArray *)SelectTemp:(int)temp Type:(int)type
{

    NSMutableArray *mutArra = nil;

    NSString *sql = [NSString stringWithFormat:@"SELECT stemp,type,key,svalue FROM t_name WHERE stemp = %d and type = %d;",temp,type];
    //sqlite3_stmt 用来取数据
    sqlite3_stmt *stmt = NULL;

    if ( sqlite3_prepare_v2(db, sql.UTF8String, -1, &stmt, NULL) == SQLITE_OK) {
        NSLog(@"查询语句没问题");
        mutArra = [NSMutableArray array];

        //每一次sqlite3_step函数,就会取出下一条数据
        while(sqlite3_step(stmt) == SQLITE_ROW) {
            sqlite3_column_int(stmt, 1);
            int temp = sqlite3_column_int(stmt, 0);
            int type = sqlite3_column_int(stmt, 1);
            const unsigned char *key = sqlite3_column_text(stmt, 2);
            const unsigned char *svalue = sqlite3_column_text(stmt, 3);

            //这里应为在项目中使用NSUserDefaults的查询,不想在做修改就直接在查询时候将查询的结果给了NSUserDefaults,
            NSString *string = [NSString stringWithUTF8String:(const char *)key];
            NSString *obj = [NSString stringWithUTF8String:(const char *)svalue];
            [[NSUserDefaults standardUserDefaults]removeObjectForKey:string];
            [[NSUserDefaults standardUserDefaults]setObject:obj forKey:string];
            printf("%d  %d %s %s\n",temp,type,key,svalue);
        }
    }else
    {
        NSLog(@"查询有问题");
    }
    return mutArra;
}

//删除数据
+(void)DeleteWithTemp:(int)temp type:(int)type Key:(NSString *)key
{
    //删除语句
    NSString *sql = [NSString stringWithFormat:@"DELETE FROM t_name WHERE stemp = %d and type = %d and key = '%@'",temp,type,key];

    sqlite3_stmt *stmt = NULL;
    if (sqlite3_prepare_v2(db, sql.UTF8String, -1, &stmt, NULL) == SQLITE_OK) {
        if (sqlite3_step(stmt) == SQLITE_ROW) {
            if (sqlite3_step(stmt) == SQLITE_DONE) {
                NSLog(@"删除成功");
            }
            NSLog(@"删除失败");

        }
    }
}
@end

以上就是封装的单例方法,在调用的时候很简单,

例如在调用添加数据的时候

    //调用创建表格的方法,类似于打开数据库
    [DataBaseHelp CreatTable];

    //出入数据,这里根据数据类型传入相应的参数
         [DataBaseHelp InsertIntoTemp:integer Type:tage Key:string Values:title];

很久以前的写的东西了,现在将东西写在博客上,有不懂和模糊的地方可以留言每天我都会在博客上写一篇东西,看到会回复的,希望对有帮助,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值