IOS FMDB操作SQLite3

nRF5340双核实战:从Zephyr环境搭建到蓝牙协议栈部署 本文详细介绍了nRF5340双核处理器的开发实践,包括Zephyr环境搭建、蓝牙协议栈部署及双核协同工作配置。通过实战案例展示了如何利用nRF5340的双核异构架构提升蓝牙应用性能,并提供了调试技巧与资源优化建议,帮助开发者高效实现低功耗蓝牙设备开发。 阅读详情


// 通过借鉴个别大牛的写法,自己也尝试做了个DemoTest 

// 代码粗糙 只希望有帮助吧

// 首先导入FMDB的所需库,gitHub 百度下都可以找到 全部导入即可

#define PATH_OF_DOCUMENT    [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]


1. appDelegate.h 


-(NSString *)dbPath ;


appdelegate.m


-(NSString *)dbPath

{

    NSString *path = [PATH_OF_DOCUMENTstringByAppendingPathComponent:@"db.sqlite"];

    return path;

}


// ==================================


//

//  WWCSqlite3ViewController.h

//  TestCAOrUIViewAnimationApp7-30

//

//  Created by Whitney.c on 15/8/10.

//  Copyright (c) 2015年 ZhongShan Sun union Medical Technology Co. Ltd. All rights reserved.

//


#import <UIKit/UIKit.h>

#import "WWCSqlite3Utils.h"


@interface WWCSqlite3ViewController :UIViewController


{

    UITextField *textUserName;

    UITextField *textUserAge;

    UITextField *textUserDesc;

    UILabel *labelShowData;

    

    WWCSqlite3Utils *sqlite3Utils;

    

   

}

@end



//

//  WWCSqlite3ViewController.m

//  TestCAOrUIViewAnimationApp7-30

//

//  Created by Whitney.c on 15/8/10.

//  Copyright (c) 2015年 ZhongShan Sun union Medical Technology Co. Ltd. All rights reserved.

//


#import "WWCSqlite3ViewController.h"

#import "GeneralMarro.h"

#import "WWCSystemConfig.h"

#import "WWCSqlite3Utils.h"


@interface WWCSqlite3ViewController ()


@end


@implementation WWCSqlite3ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view.

    

    

    self.title =@"SQLite3";

    

    sqlite3Utils = [WWCSqlite3UtilssharedInstance];

    

    [selfloadSelfLayoutSubvies];

    

    

}



-(void)loadSelfLayoutSubvies

{

    

    NSString *sqlite3Version = [WWCSystemConfiggetCurrentSQLite3Version];

    NSLog(@"currentSqlite3Version:%@",sqlite3Version);

    

    

    staticdispatch_once_t onceToken;

    dispatch_once(&onceToken , ^{

        

        [selfcreateTable];

        

    });

    

    

    [selfinitUi];

    

    

    [selfperformSelector:@selector(tapGestureRecognizer)withObject:nilafterDelay:0];

    

}



-(void)tapGestureRecognizer

{

    UITapGestureRecognizer *TAP = [[UITapGestureRecognizeralloc] initWithTarget:selfaction:@selector(tapAction:)];

    [self.viewaddGestureRecognizer:TAP];

}



-(void)tapAction:(UITapGestureRecognizer *)sender

{

    

    // editing =  no

    [textUserAgeresignFirstResponder];

    [textUserDescresignFirstResponder];

    [textUserNameresignFirstResponder];

}




#pragma mark - init UI

-(void)initUi

{

    CGRect rect = [UIScreenmainScreen].applicationFrame;

    

    

    textUserName = [[UITextFieldalloc] init];

    textUserName.frame =CGRectMake(10,10, rect.size.width-20,35);

    textUserName.backgroundColor = [UIColorgrayColor];

    textUserName.leftView =nil;

    [textUserNamesetPlaceholder:@"昵称"];

    

    textUserAge = [[UITextFieldalloc] init];

    textUserAge.frame =CGRectMake(10,10+35*1+5, rect.size.width-20,35);

    textUserAge.backgroundColor = [UIColorgrayColor];

    [textUserAgesetPlaceholder:@"年龄"];

    

    textUserDesc = [[UITextFieldalloc] init];

    textUserDesc.frame =CGRectMake(10,10+35*2+10, rect.size.width-20,35);

    textUserDesc.backgroundColor = [UIColorgrayColor];

    [textUserDescsetPlaceholder:@"描述"];

    

    [self.viewaddSubview:textUserName];

    [self.viewaddSubview:textUserAge];

    [self.viewaddSubview:textUserDesc];

    

    

    

    UIButton *button = [UIButtonbuttonWithType:UIButtonTypeCustom];

    button.frame =CGRectMake(10,10+35*3+50, rect.size.width-20,35);

    button.backgroundColor = [UIColorblueColor];

    [button setTitle:@"保存数据"forState:UIControlStateNormal];

    [button addTarget:selfaction:@selector(saveUserInfo:)forControlEvents:UIControlEventTouchUpInside];

    button.showsTouchWhenHighlighted =YES;

    

    [self.viewaddSubview:button];

    

    

    UIButton *buttonQuery = [UIButtonbuttonWithType:UIButtonTypeCustom];

    buttonQuery.frame =CGRectMake(10,15+35*4+50, rect.size.width-20,35);

    buttonQuery.backgroundColor = [UIColorblueColor];

    [buttonQuery setTitle:@"查询数据"forState:UIControlStateNormal];

    [buttonQuery addTarget:selfaction:@selector(queryUserInfo)forControlEvents:UIControlEventTouchUpInside];

    buttonQuery.showsTouchWhenHighlighted =YES;

    

    [self.viewaddSubview:buttonQuery];

    

    

    UIButton *buttonDelete = [UIButtonbuttonWithType:UIButtonTypeCustom];

    buttonDelete.frame =CGRectMake(10,20+35*5+50, rect.size.width-20,35);

    buttonDelete.backgroundColor = [UIColorblueColor];

    [buttonDelete setTitle:@"删除数据"forState:UIControlStateNormal];

    [buttonDelete addTarget:selfaction:@selector(deleteUserInfo)forControlEvents:UIControlEventTouchUpInside];

    buttonDelete.showsTouchWhenHighlighted =YES;

    

    [self.viewaddSubview:buttonDelete];

    

    

    labelShowData = [[UILabel alloc] init];

    labelShowData.frame = CGRectMake(10,25+35*6+50, rect.size.width-20,100);

    labelShowData.font = [UIFont systemFontOfSize:12];

    labelShowData.backgroundColor = [UIColor grayColor];

    labelShowData.alpha = 0 ;

    labelShowData.lineBreakMode = NSLineBreakByCharWrapping;

    labelShowData.numberOfLines = 0;

    [self.view addSubview:labelShowData];

    

    

}


#pragma mark - 保存数据


-(void)saveUserInfo:(UIButton *)sender

{

    NSString *userName = textUserName.text;

    NSString *userAge = textUserAge.text;

    NSString *userDesc = textUserDesc.text;

    

    

    if ( [userName isEqualToString:@""] || [userAge isEqualToString:@""] || [userDesc isEqualToString:@""] ) {

        NSLog(@" 请输入参数才能保存 ! ");

    }else {

        

        BOOL BOOL_ = [sqlite3Utils saveUserInfoToSqliteForUserName:userName forUserAge:userAge forUserDesc:userDesc];

        if (BOOL_) {

            NSLog(@"数据插入成功 !");

        }else{

            NSLog(@"数据插入失败 !");

        }

        

    }

    

}


#pragma mark - 查询数据


-(void)queryUserInfo

{

    NSArray *array = [sqlite3Utils queryUserInfoForWhereUserName:@""];

    

    if (array.count>0) {

        NSLog(@" 查询到数据 %ld条", [array count] );

        NSString *string = @"";

        for (int i=0; i<array.count; i++) {

            

            NSDictionary *dic = [array objectAtIndex:i];

            

            NSLog(@"%d -> userName:%@ ,userAge:%@ , userDesc:%@", i,

                  [dic objectForKey:@"uName"],

                  [dic objectForKey:@"uAge"],

                  [dic objectForKey:@"uDesc"]);

            string = [string stringByAppendingString:

                      [NSString stringWithFormat:@"%d -> userName:%@ ,userAge:%@ , userDesc:%@\n", i,

                                  [dic objectForKey:@"uName"],

                                  [dic objectForKey:@"uAge"],

                                  [dic objectForKey:@"uDesc"] ]];

            

        }

        

        if (![string isEqualToString:@""]) {

            labelShowData.text = string ;

            labelShowData.alpha = 1;

        }

        

    }else{

        NSLog(@" 没有数据可查询");

        labelShowData.text = @"没有数据可查询" ;

        labelShowData.alpha = 1;


    }

    

    

}


#pragma mark - 删除数据

-(void)deleteUserInfo

{

    BOOL bool_ = [sqlite3Utils deleteUserInfoWhereUserName:@""];

    

    if (bool_) {

        NSLog(@" 删除数据成功 !");

    }else{

        NSLog(@" 删除数据失败 !");

    }

}



#pragma mark - 创建User表

-(void)createTable

{

    

    BOOL bool_ = [sqlite3Utils createUserTable:@"user_table"];

    

    if (bool_) {

        

        NSLog(@" 表创建成功!");

        

    }else{

        

    }

    

}



-(void)viewDidDisappear:(BOOL)animated

{

    [super viewDidDisappear:animated];

    

    // 宏定义一个数据库版本

    // 比较存储在本地的版本

    // 若是有改动的话,根据要求变更数据库结构或者是其它什么

    

    [WWCSystemConfig setCurrentSQLite3Version:@"3.5.5"];

}



- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


/*

#pragma mark - Navigation


// In a storyboard-based application, you will often want to do a little preparation before navigation

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    // Get the new view controller using [segue destinationViewController].

    // Pass the selected object to the new view controller.

}

*/


@end



// ===================


//

//  WWCSqlite3Utils.h

//  TestCAOrUIViewAnimationApp7-30

//

//  Created by Whitney.c on 15/8/10.

//  Copyright (c) 2015年 ZhongShan Sun union Medical Technology Co. Ltd. All rights reserved.

//


#import <Foundation/Foundation.h>

#import "FMDatabase.h"


@interface WWCSqlite3Utils :NSObject


// 单例模式

+(instancetype)sharedInstance;


// 创建用户表 (不存在才创建-> .. if not exists .. )

-(BOOL)createUserTable:(NSString *)tableName;



// 插入数据到用户表中

-(BOOL)saveUserInfoToSqliteForUserName:(NSString *)userName forUserAge:(NSString *)userAge forUserDesc:(NSString *)userDesc;


// 插入数据到用户表中(队列方式/多线程)

-(BOOL)saveUserInfoToSqliteForUserNameByQueue:(NSString *)userName forUserAge:(NSString *)userAge forUserDesc:(NSString *)userDesc;


// 查询数据

-(NSArray *)queryUserInfoForWhereUserName:(NSString *)userName;


// 删除数据

-(BOOL)deleteUserInfoWhereUserName:(NSString *)userName;


// 修改数据

-(BOOL)updateUserInfoWherUserName:(NSString *)userName;





@end



//

//  WWCSqlite3Utils.m

//  TestCAOrUIViewAnimationApp7-30

//

//  Created by Whitney.c on 15/8/10.

//  Copyright (c) 2015年 ZhongShan Sun union Medical Technology Co. Ltd. All rights reserved.

//


#import "WWCSqlite3Utils.h"

#import "WWCAppDelegate.h"

#import "FMDatabaseQueue.h"



@implementation WWCSqlite3Utils



NSString *path ;


-(id)init

{

    self = [super init];

    if (self) {

        NSLog(@" init 。。。。");

        WWCAppDelegate *appdelegate = (WWCAppDelegate *)kMyAppDelegate;

        path = [appdelegate dbPath];

        

    }

    returnself;

}



// 单例模式

+(instancetype)sharedInstance

{

    static WWCSqlite3Utils *sqlite3Utils =nil;

    static dispatch_once_t once_token ;

    dispatch_once(&once_token, ^{

        NSLog(@" once token ");

        sqlite3Utils = [[WWCSqlite3Utils alloc] init];

    });

    

    return sqlite3Utils;

}




-(BOOL)createUserTable:(NSString *)tableName

{

    NSFileManager * fileManager = [NSFileManager defaultManager];

    NSLog(@" path1 :%@", path);

    

    // 判断是否存在该文件

    if ( [fileManager fileExistsAtPath:path] ==NO ) {

        

        [fileManager createFileAtPath:path contents:nil attributes:nil];

    }


    // 创建数据库表

    

    FMDatabase *db = [FMDatabase databaseWithPath:path];

    

    if ( [db open] ) {

        NSString *sql = @" CREATE TABLE IF NOT EXISTS 'user' ('id' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , 'user_name' VARCHAR(30), 'user_age' INTEGER , 'user_desc' VARCHAR(100) ) ";

        NSLog(@"Create table sql->%@", sql);

        return [db executeUpdate:sql];

    }

    

    [db close];

    

    returnNO;

    

}


// 插入数据到用户表中

-(BOOL)saveUserInfoToSqliteForUserName:(NSString *)userName forUserAge:(NSString *)userAge forUserDesc:(NSString *)userDesc

{

    NSLog(@" path2 :%@",path);

    

    FMDatabase *db  =[FMDatabasedatabaseWithPath:path];

    if ([dbopen]) {

         NSString *sql =@" insert into user (user_name,user_age,user_desc) values(?,?,?)";

        

        BOOL bool_ = [dbexecuteUpdate:sql, userName ,userAge, userAge];

        [db close];

        

        return bool_;

    }

   

    returnNO;

}


// 插入数据到用户表中(队列方式/多线程)

-(BOOL)saveUserInfoToSqliteForUserNameByQueue:(NSString *)userName forUserAge:(NSString *)userAge forUserDesc:(NSString *)userDesc

{

    

    FMDatabaseQueue *queue = [FMDatabaseQueuedatabaseQueueWithPath:path];

    

    // 创建队列  -队列标签 quene1 标签

    dispatch_queue_t q1 =dispatch_queue_create("quene1",NULL);

    dispatch_queue_t q2 =dispatch_queue_create("quene2",NULL);

    

    

    dispatch_async(q1, ^{

        for (int i = 0; i <10 ; i ++) {

            //  开始队列插入数据

            [queue inDatabase:^(FMDatabase *db1){

               

                NSString *sql1 =@" insert into user (user_name, user_age,user_desc) values(?,?,?) ";

                BOOL bool_  = [db1executeUpdate:sql1,userName,userAge,userDesc];

                

                if (bool_) {

                    NSLog(@"插入数据成功 queue1 %d", i);

                }else{

                    NSLog(@"插入数据失败 queue1 %d", i);

                }

            }];

        }

        

    });

    

    

    dispatch_async(q2, ^{

        for (int i = 0; i <15 ; i ++) {

            //  开始队列插入数据

            [queue inDatabase:^(FMDatabase *db2){

                

                NSString *sql2 =@" insert into user (user_name, user_age,user_desc) values(?,?,?) ";

                BOOL bool_  = [db2executeUpdate:sql2,userName,userAge,userDesc];

                

                if (bool_) {

                    NSLog(@"插入数据成功 queue2 %d", i);

                }else{

                    NSLog(@"插入数据失败 queue2 %d", i);

                }

            }];

        }

        

    });


    

    returnNO;

}



// 查询数据

-(NSArray *)queryUserInfoForWhereUserName:(NSString *)userName

{

    NSLog(@" PATH3 :%@",path);

    

    FMDatabase *db = [FMDatabasedatabaseWithPath:path];

    if ( [dbopen] ) {

        NSString *sql =@" select * from user ";

        FMResultSet *rs = [dbexecuteQuery:sql];

        

        NSMutableArray *array = [[NSMutableArrayalloc] initWithCapacity:10];

        

        while ([rsnext]) {

            NSMutableDictionary *dic = [[NSMutableDictionaryalloc] initWithCapacity:5];

            NSString *uName = [rsstringForColumn:@"user_name"];

            NSString *uAge = [rsstringForColumn:@"user_age"];

            NSString *uDesc = [rsstringForColumn:@"user_desc"];

            

            // 利用下标index的方式来获取字段  - FMResultSet中可查看

            //NSString *uName = [rs intForColumnIndex:0];

            //NSString *uAge = [rs intForColumnIndex:1];

            //NSString *uDesc = [rs intForColumnIndex:2];

            

            NSLog(@" uName:%@, uAge:%@ ,uDesc:%@" , uName, uAge, uDesc) ;

            

            // 这一步也可以用Model来实现

            [dic setObject:uNameforKey:@"uName"];

            [dic setObject:uAgeforKey:@"uAge"];

            [dic setObject:uDescforKey:@"uDesc"];

            

            [array addObject:dic];

            

        }

        

        [db close];

        

        return array;

        

    }

    returnnil;

    

}



// 删除数据

-(BOOL)deleteUserInfoWhereUserName:(NSString *)userName

{

    NSLog(@"path4 :%@",path);

    

    FMDatabase *db = [FMDatabasedatabaseWithPath:path];

    if ( [dbopen] ) {

        NSString *sql =@" delete from user "; // delete from user where user_name = ?

        BOOL bool_  = [dbexecuteUpdate:sql];

        

        [db close];

        

        

        return bool_;

        

    }

    returnNO;

}



// 修改数据

-(BOOL)updateUserInfoWherUserName:(NSString *)userName

{

    // sql = @" update user set user_desc = ?  where user_name = ? ";

    

    

    returnNO;

}




@end



// 代码结束   附图 队列代码写了,操作可以自己去尝试


 

unity C# 计算3D空间任意多边形面积,距离,角度测量工具 unity C# 计算3D空间任意多边形面积,距离,角度 using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.UI; using System; /// /// 划线面积,距离,角度 /// public class UnderlinedMeasureTool : MonoBehaviour { /// /// 相机 /// public Camera _c 阅读详情

相关推荐

PCA9548实战:从硬件连接到Linux驱动的I2C扩展全解析

本文详细解析了PCA9548 I2C多路复用器从硬件连接到Linux驱动配置的全过程。涵盖硬件引脚连接、电源去耦、地址选择等关键设计要点,以及Linux驱动加载、设备树配置和应用层编程技巧,帮助开发者高效实现I2C总线扩展。

weixin_28726391的博客 410

iOS基础——数据操作之Sqlite3、FMDB

iOS基础——数据操作之Sqlite3、FMDB前言 iOS数据库操作可分为Sqlite3、CoreData、FMDB第三方库 sqlite3在不使用的时候需要close,在需要的使用的时候重新open 一、Sqlite3数据库操作无非就是Sql语句的书写,最常见的就是增删改查,通过Sqlite3实现我们简单的数据存储1、导入Sqlite3依赖库在项目的设置文件中找到Link Binary With

点击置顶文章查看博客目录(全站式导航) 1525

避坑指南:Cursor AI生成Flutter代码时最容易翻车的5个配置细节

本文深入剖析了使用Cursor AI生成Flutter代码时,因.cursorrules配置文件不当而导致的五大常见问题。重点探讨了如何通过制定清晰、具体的规则,避免状态管理混乱、设计图输入低效、项目架构脱节、性能隐患及规则维护缺失等陷阱,从而将AI转化为高效、可靠的开发伙伴,提升代码质量和团队协作效率。

wdx0123456的博客 415

IOS中使用FMDB操作sqlite3

FMDB提供了用o-c封装的访问sqlite3的方法,避免了在用O-c编程中夹杂C风格的代码(不是说不能使用,而是夹杂在一块代码风格不一致)。   以下记录使用过程中的一些心得: 1创建,插入,更新和删除:使用executeUpdate方法,而查询则用executeQuery 2 插入的数据一律用oc中的对象类型:比如某列是double,插入的时候要用NSNumber对象

IOS研究专栏 1169

Hyper-V创建Ubuntu虚拟机设置固定IP

本文记录使用hyper-v创建ubuntu虚拟机,为虚拟设置固定IP且通过物理机可访问。

2623

RoboMaster机甲大师赛备赛:如何用STM32+CAN总线精准控制四个大疆3508电机?

本文详细介绍了在RoboMaster机甲大师赛中,如何利用STM32和CAN总线技术精准控制四台大疆3508电机。从硬件架构设计、多电机ID分配、数据解析到同步控制算法,全面解析了构建高响应、低延迟底盘驱动系统的关键技术,助力参赛队伍提升机器人运动性能。

weixin_28684825的博客 134

mysql和sqlite3 ios_iOS-SQLite3和FMDB使用

1 SQLite31> SQLite的语法管理工具:Navicat数据类型{text字段integer数字real浮点bolb二进制可以完整保存数据,例如照片}ddl(结构定义CREATEALTERDROP){CREATECREATETABLE表的名字(每个字段的定义字段名数据类型...)CREATETABLEt_cjb(xiaomin...

weixin_33518100的博客 255

Python爬虫实战:5分钟搞定大众点评评论数据抓取(附完整代码)

本文详细介绍了使用Python爬虫高效获取大众点评评论数据的5个关键技巧,包括环境配置、智能页面解析、反反爬策略、数据存储与容错设计以及性能优化。通过实战案例和完整代码,帮助开发者快速掌握文本挖掘技术,适用于市场分析和商业决策。

weixin_30660027的博客 290

ios(六)sqlite3以及FMDB

SQLite:一种轻量的本地数据库,方便嵌入系统,支持跨平台,根据工作经验来看,无论是Android还是iOS大多都采用SQLite 首先我们需要新建一个数据库,我们给他起名personinfo.sqlite,创建一张叫做person的表,里面有三个字段 name,age,sex。数据库存放在iOS的沙盒文件Document目录下, #define DBName @"personinfo.sq

u012723810的博客 436

R语言单因素被试内ANOVA检验

在R语言中,我们可以使用多种方法进行被试内ANOVA检验,其中包括使用内建函数或使用外部包。我们随机选择了10个被试,并对每个被试使用了三种不同的药物处理。通过上述代码示例,我们可以使用R语言进行单因素被试内ANOVA检验。假设我们的数据存储在一个名为"data"的数据框中,其中包含两个列:一个列是被试的编号,另一个列是生物指标的测量值。在上述代码中,我们创建了一个名为"data"的数据框,其中"Subject"列包含了被试的编号,"Measurement"列包含了生物指标的测量值。参数指定了数据来源。

PixelNovaO的博客 363

AUTOSAR内存篇 -内存驱动(Mem)

Mem驱动程序的task是基于底层内存设备技术的物理分段的低级内存访问。Mem驱动程序的API与内存设备技术无关,因此向存储器访问模块上层提供了与存储器设备无关的接口。所有高级功能(如跨段操作)都由内存访问模块处理,以尽可能降低Mem驱动器的复杂性和占用空间。Mem驱动API命名、类型定义和文件命名规则都遵循标准的AUTUSAR BSW模块实现。服务Mem_Init初始化Mem驱动的内部状态,并设置Mem驱动Job处理状态到MEM_JOB_OK。

IOT2017的博客 713

IOS开发数据存储篇—libsqlite3和FMDB的基本使用和区别

一、简要介绍libsqlite3是IOS中纯C语言操作Sqlite数据库的一个库文件。使用起来和OC面向对象的方式有点别扭,不是特别的方便。FMDB是IOS平台的SQLite数据库框架,以OC的方式封装了SQLite的C语言的API。FMDB使用起来更加的面向对象,省去了很多麻烦、冗余的C语言代码,对比苹果自带的Core Data框架,更加的轻量级和灵活。提供了多线程安全的数据库操作的方法,有效的防

yixiangboy的博客 3135

在 FlexSim 中建 AGV 小车模型时,如果设定“每次充电需要 2 小时才能充满”,应该如何配置 AGV 的充电功能?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 881

[iOS]FMDB入门学习

最近在做数据库的项目,S

神奇的芋頭(http://blog.youkuaiyun.com/liuyu1114) 1011

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ios数据存储中关于Sqlite3使用第三方框架FMDB

在网上发现一个对sqlite3数据库操作的一个封装类(fmdb),看起来比较优雅,拿来研究一下。  首先从这个网址:https://github.com/ccgus/fmdb下载fmdb的源码,  将Src文件夹下的文件复制到您当前工程文件目录下,然后将代码导入到您的工程中(除了fmdb.m),编译一下,如果有错误,可能是您未导入slite3的链接库,打开Build Phases,如将li

£渚∮薰£ 3635

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

iOS-SQLite3和FMDB使用

1 SQLite3 1> SQLite的语法 管理工具:Navicat   数据类型 {   text     字段   integer  数字   real     浮点   bolb     二进制  可以完整保存数据,例如照片 }    ddl(结构定义 CREATE ALTER DROP) {    CREATE CREATE TABLE 表的名字(每个字段

zl325118的博客 437

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

iOS中FMDB的使用

http://www.cnblogs.com/jerehedu/p/5054426.html?utm_source=tuicool&utm_medium=referral

吃梨就葡萄 492

数据存储 - libsqlite3和FMDB的基本使用和区别

一、简要介绍 libsqlite3是IOS中纯C语言操作Sqlite数据库的一个库文件。使用起来和OC面向对象的方式有点别扭,不是特别的方便。 FMDB是IOS平台的SQLite数据库框架,以OC的方式封装了SQLite的C语言的API。FMDB使用起来更加的面向对象,省去了很多麻烦、冗余的C语言代码,对比苹果自带的Core Data框架,更加的轻量级和灵活。提供了多线程安全的数据库操作的方法,有...

宋卓的博客 375

iOS-FMDB和SQLite3使用

1 SQLite31> SQLite的语法管理工具:Navicat数据类型 { text 字段 integer 数字 real 浮点 bolb 二进制 可以完整保存数据,例如照片 }ddl(结构定义 CREATE ALTER DROP) {CREATE CREATE TABLE 表的名字(每个字段的定义 字段名 数据类型…) CREATE

极客学伟的技术分享社区 2291

[IOS] ios数据存储中关于Sqlite3使用第三方框架FMDB

{丸の子} 94

数据库(fmdb)

导入fmdb 1.首先需要把fmdb这个第三方类库给导入工程中。 FMDB的github地址: https://github.com/ccgus/fmdb #import "ViewController.h" // FMDatabase是在iOS开发中处理sqlite3的一个第三方库,它能自动识别sql语句,大大简化了sqlite3的操作 #import "FMDatabase.

JianRen_L的博客 600

iOS开发数据存储篇—libsqlite3和FMDB的基本使用和区别

一、简要介绍libsqlite3是IOS中纯C语言操作Sqlite数据库的一个库文件。使用起来和OC面向对象的方式有点别扭,不是特别的方便。FMDB是IOS平台的SQLite数据库框架,以OC的方式封装了SQLite的C语言的API。FMDB使用起来更加的面向对象,省去了很多麻烦、冗余的C语言代码,对比苹果自带的Core Data框架,更加的轻量级和灵活。提供了多线程安全的数据库操作的方法,有效的...

weixin_34326179的博客 170

iOS开发之数据存储之SQLite3(包括FMDB)

1、概述 SQLite3是一款开源的嵌入式关系型数据库,可移植性好、易使用、内存开销小。 SQLite3是无类型的,意味着你可以保存任何类型的数据到任意表的任意字段中。比如下列的创表语句是合法的: create table t_person(name, age); 为了保证可读性,建议还是把字段类型加上: create table t_person(na...

weixin_34029680的博客 68

iOS开发数据存储—libsqlite3和FMDB的基本使用和区别

一、简要介绍 libsqlite3是iOS中纯C语言操作Sqlite数据库的一个库文件。使用起来和OC面向对象的方式有点别扭,不是特别的方便。 FMDB是IOS平台的SQLite数据库框架,以OC的方式封装了SQLite的C语言的API。FMDB使用起来更加的面向对象,省去了很多麻烦、冗余的C语言代码,对比苹果自带的Core Data框架,更加的轻量级和灵活。提供了多线程安全的数据库操

Nicholas的专栏 1869

12.第三方源码-FMDB

1、简述: FMDB是iOS平台的SQLite数据库框架,是对libsqlite3框架的封装 FMDB以OC的方式封装了SQLite的C语言API 2、FMDB的优点: 使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码 对比苹果自带的Core Data框架,更加轻量级和灵活 提供了多线程安全的数据库操作方法,有效地防止数据混乱 3、FMDB的github地址 传送门 4、FMDB的三...

科技区软件类AI博主 🔍 专注 AI 工具测评 / 前沿产品深度拆解 / 行业趋势预判 🚫 拒绝科技玄学,只讲人话干货 —— 从工具使用到商业落地,搭建可复用的 AI 应用框架 297
上一篇: ios 单例模式的写法
下一篇: IOS RAC(ReactiveCocoa) -Functional Reactive Programming 详解[转载ReactiveCocoa与Functional Reactive Prog]
dev-kevin
博客等级 码龄16年 3粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值