zoukankan      html  css  js  c++  java
  • SQLite第一天:通过代码对本地的 SQLite 进行一系列操作

    SQLiteManager 数据层---> 包括: library(用户信息)tmp(临时文件[用户退出时不定时清除])Document

    1.Documents:

    只有用户生成的文件、其他数据及其他程序不能重新创建的文件,应该保存在<Application_Home>/Documents 目录下面,并将通过iCloud自动备份。

    2.Library:

    可以重新下载或者重新生成的数据应该保存在 <Application_Home>/Library/Caches 目录下面。举个例子,比如杂志、新闻、地图应用使用的数据库缓存文件和可下载内容应该保存到这个文件夹。

    3.tmp:

    只是临时使用的数据应该保存到 <Application_Home>/tmp 文件夹。尽管 iCloud 不会备份这些文件,但在应用在使用完这些数据之后要注意随时删除,避免占用用户设备的空间

    引用libsqlite3.tbd资源文件和"FMDB 文件夹"

    然后添加 SQLiteManager

    在SQLiteManager. h 文件中插入单例和BOOL 类型更新数据库的方法和(数组类型的获得SQL的方法)将得到的SQL放入数组中

     1 +(instancetype)share;
     2 /**
     3  *  更新数据库数据
     4  *
     5  *  @param sql sql 语句
     6  *
     7  *  @return 返回成功或者失败
     8  */
     9 -(BOOL)run:(NSString *)sql;
    10 /**
    11  *  查找数据库数据
    12  *
    13  *  @param sql 查找的sql 语句
    14  *
    15  *  @return 返回根据传进来的 sql 语句查询的结果
    16  */
    17 -(NSArray *)getData:(NSString *)sql;

    然后在SQLiteManager.m 文件中实现各个方法

    首先引入头文件#import "FMDatabase"

    添加一个 FMDatabase属性 fmDB, 实现单例方法, init初始化 方法并添加一个 creatDB的方法

    在creatDB 方法中实现如下几步:

    1.指定 NSHomeDirectory 路径

    2.初始化 fmDB, 并且在创建的时候指定数据库路径

    3.打开数据库{执行数据库操作,如果有 Person, 则跳过,没有则创建}

    然后实现更新数据库操作和查找数据库数据操作,代码如下:

    #import "SQLiteManager.h"
    #import "FMDatabase.h"
    
    @interface SQLiteManager ()
    
    @property (nonatomic,strong)FMDatabase *fmdb;
    
    @end
    
    
    @implementation SQLiteManager
    
    +(instancetype)share
    {
        static SQLiteManager *cm  = nil;
        static dispatch_once_t onceToken;
       
        dispatch_once(&onceToken, ^{
            cm = [[SQLiteManager alloc] init];
        });
        return cm;
    }
    
    - (instancetype)init
    {
        if (self = [super init]) {
            [self creatDB];
        }
        return self;
    }
    
    -(void)creatDB
    {
        //1.指定 NSHomeDiretory 路径
        NSString *path = [NSString stringWithFormat:@"%@/Documents/app.db",NSHomeDirectory()];
        NSLog(@"path = %@",path);
        //2.初始化 FMDB, 并且在创建的时候指定数据库路径
        self.fmdb = [[FMDatabase alloc] initWithPath:path];
        //3.打开数据库
        if ([self.fmdb open]) {
            //4.执行数据库操作,如果当前有 Person, 则跳过,没有则创建
            NSString *sql = @"CREATE TABLE "Person" ("person_id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT, "tel" TEXT, "age" TEXT)";
            [self run:sql];  
        }else
        {
            NSLog(@"打开数据库失败!");
            return;
        }
    }
    -(BOOL)run:(NSString *)sql
    {
       return  [self.fmdb executeUpdate:sql];
    }
    
    -(NSArray *)getData:(NSString *)sql
    {
        FMResultSet *result = [self.fmdb executeQuery:sql];
        NSMutableArray *mArr = [NSMutableArray arrayWithCapacity:0];
        while ([result next]) {
            NSDictionary *dic = [result resultDictionary];//遍历
            [mArr addObject:dic];
        }
        return [NSArray arrayWithArray:mArr];
        
        return nil;
    }
    
    @end

    在 ViewController 文件中增加添加和查询操作,先添加"SQLiteManager"头文件

    添加 SQLiteManager 属性

    在 VD 方法中添加 self.sqlManager = [SQLiteManager share];

    实现添加方法和查询方法

     1 #import "ViewController.h"
     2 #import "SQLiteManager.h"
     3 @interface ViewController ()
     4 @property (nonatomic,strong)SQLiteManager *sqlManager;
     5 @end
     6 
     7 @implementation ViewController
     8 
     9 - (void)viewDidLoad {
    10     [super viewDidLoad];
    11     // Do any additional setup after loading the view, typically from a nib.
    12     self.sqlManager = [SQLiteManager share];
    13 }
    14 #pragma mark 添加
    15 - (IBAction)tapAddBtn:(id)sender {
    16     NSString *sql = @"insert into person(name,age,tel) values('mark','18','119')";
    17     if ([self.sqlManager run:sql]) {
    18         NSLog(@"添加成功");
    19     }
    20     else
    21     {
    22         NSLog(@"添加失败");
    23     }
    24     [self.sqlManager run:sql];
    25 }
    26 #pragma mark 查询
    27 - (IBAction)tapSearchBtn:(id)sender {
    28     NSString *sql = @"select * from person where name = 'mark'";
    29     [self.sqlManager getData:sql];
    30     NSArray *result = [self.sqlManager getData:sql];
    31     NSLog(@"查询结果 result = %@",result);
    32 }
    33 
    34 - (void)didReceiveMemoryWarning {
    35     [super didReceiveMemoryWarning];
    36     // Dispose of any resources that can be recreated.
    37 }
    38 
    39 @end
    View Code
  • 相关阅读:
    ASP.NET Web Optimization Framework
    HearthBuddy Plugin编写遇到的问题
    HearthBuddy的plugin加载
    Unexpected ConvertTo-Json results? Answer: it has a default -Depth of 2
    HearthBuddy卡牌无法识别
    HearthstoneBot
    网络传输中的三张表,MAC地址表、ARP缓存表以及路由表
    DNS原理及其解析过程(转)
    React系列之--props属性
    react中constructor( )和super( )的具体含义以及如何使用
  • 原文地址:https://www.cnblogs.com/quwujin/p/4877084.html
Copyright © 2011-2022 走看看