iOS FMDB的使用(增,删,改,查,sqlite存取图片)
iOS FMDB的使用(增,删,改,查,sqlite存取图片)
在上一篇博客我对sqlite的基本使用进行了详细介绍...
但是在实际开发中原生使用的频率是很少的...
这篇博客我将会较全面的介绍FMDB的使用...
例: 增,删,改,查,sqlite存取图片
有关框架的导入我在上一篇博客进行了详细介绍这里就不在介绍,没有看到上一篇博客的可以点击下面的连接.
接下来我会按照上篇博客的顺序,模式进行介绍.
(增删改查与sqlite存取图片我会通过两个工程介绍)
创建数据库与表
代码:
@interface ViewController ()
@property (nonnull, strong) FMDatabase * database;
@end
- (void)viewDidLoad {
[super viewDidLoad];
//数据库在沙盒中的路径
NSString * fileName = [[NSSearchPathForDirectoriesInDomains(13, 1, 1)lastObject]stringByAppendingPathComponent:@"testOfFMDB.sqlite"];
NSLog(@"%@",fileName);
//创建数据库
self.database = [[FMDatabase alloc]initWithPath:fileName];
//打开数据库
if ([self.database open]) {
NSLog(@"打开数据库成功");
//创建表 返回值为BOOL
BOOL flag = [self.database executeUpdate:@"create table if not exists t_testOfFMDB (id integer primary key autoincrement,name text)"];
if (flag) {
NSLog(@"成功建表");
}else{
NSLog(@"失败建表");
}
//关闭数据库
[self.database close];
}else{
NSLog(@"打开数据库失败");
}
}
图片(创建数据库与表)

增
代码:
- (IBAction)insert:(id)sender {
if ([self.database open]) {
for (NSInteger i = 0; i < 100; i ++) {
BOOL flag = [self.database executeUpdate:@"insert into t_testOfFMDB (name) values(?)",[NSString stringWithFormat:@"旭宝爱吃鱼--%zd",arc4random_uniform(99)]];
if (flag) {
NSLog(@"插入成功");
}else{
NSLog(@"插入失败");
}
}
}
[self.database close];
}
图片(增)

删
代码:
- (IBAction)delete:(id)sender {
if ([self.database open]) {
for (NSInteger i = 0; i < 100; i ++) {
BOOL flag = [self.database executeUpdate:@"delete from t_testOfFMDB where id < 50"];
if (flag) {
NSLog(@"删除成功");
}else{
NSLog(@"删除失败");
}
}
}
[self.database close];
}
图片(删)

改
代码:
- (IBAction)update:(id)sender {
if ([self.database open]) {
for (NSInteger i = 0; i < 100; i ++) {
BOOL flag = [self.database executeUpdate:@"update t_testOfFMDB set name = 'hello world' where id > 50"];
if (flag) {
NSLog(@"修改成功");
}else{
NSLog(@"修改失败");
}
}
}
[self.database close];
}
图片(改)

查
代码:
- (IBAction)select:(id)sender {
if ([self.database open]) {
//返回查询数据的结果集
FMResultSet * resultSet = [self.database executeQuery:@"select * from t_testOfFMDB"];
//查询表中的每一个记录
while ([resultSet next]) {
NSString * name = [resultSet stringForColumn:@"name"];
NSLog(@"%@",name);
}
}
[self.database close];
}
图片(查)

整体代码
//
// ViewController.m
// FMDB的使用
//
// Created by ma c on 16/5/10.
// Copyright © 2016年 xubaoaichiyu. All rights reserved.
//
#import "ViewController.h"
#import "FMDB.h"
@interface ViewController ()
@property (nonnull, strong) FMDatabase * database;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//数据库在沙盒中的路径
NSString * fileName = [[NSSearchPathForDirectoriesInDomains(13, 1, 1)lastObject]stringByAppendingPathComponent:@"testOfFMDB.sqlite"];
NSLog(@"%@",fileName);
//创建数据库
self.database = [[FMDatabase alloc]initWithPath:fileName];
//打开数据库
if ([self.database open]) {
NSLog(@"打开数据库成功");
//创建表 返回值为BOOL
BOOL flag = [self.database executeUpdate:@"create table if not exists t_testOfFMDB (id integer primary key autoincrement,name text)"];
if (flag) {
NSLog(@"成功建表");
}else{
NSLog(@"失败建表");
}
//关闭数据库
[self.database close];
}else{
NSLog(@"打开数据库失败");
}
}
- (IBAction)insert:(id)sender {
if ([self.database open]) {
for (NSInteger i = 0; i < 100; i ++) {
BOOL flag = [self.database executeUpdate:@"insert into t_testOfFMDB (name) values(?)",[NSString stringWithFormat:@"旭宝爱吃鱼--%zd",arc4random_uniform(99)]];
if (flag) {
NSLog(@"插入成功");
}else{
NSLog(@"插入失败");
}
}
}
[self.database close];
}
- (IBAction)update:(id)sender {
if ([self.database open]) {
for (NSInteger i = 0; i < 100; i ++) {
BOOL flag = [self.database executeUpdate:@"update t_testOfFMDB set name = 'hello world' where id > 50"];
if (flag) {
NSLog(@"修改成功");
}else{
NSLog(@"修改失败");
}
}
}
[self.database close];
}
- (IBAction)update:(id)sender {
if ([self.database open]) {
for (NSInteger i = 0; i < 100; i ++) {
BOOL flag = [self.database executeUpdate:@"update t_testOfFMDB set name = 'hello world' where id > 50"];
if (flag) {
NSLog(@"修改成功");
}else{
NSLog(@"修改失败");
}
}
}
[self.database close];
}
- (IBAction)select:(id)sender {
if ([self.database open]) {
//返回查询数据的结果集
FMResultSet * resultSet = [self.database executeQuery:@"select * from t_testOfFMDB"];
//查询表中的每一个记录
while ([resultSet next]) {
NSString * name = [resultSet stringForColumn:@"name"];
NSLog(@"%@",name);
}
}
[self.database close];
}
@end
sqlite存取图片
这里有几点注意:
- 图片无法直接存入数据库中需要把图片转换为二进制后存入数据库
- 二进制存储的格式为 blob
整体代码
//
// ViewController.m
// FMDB的使用
//
// Created by ma c on 16/5/10.
// Copyright © 2016年 xubaoaichiyu. All rights reserved.
//
#import "ViewController.h"
#import "FMDB.h"
@interface ViewController ()
@property (nonnull, strong) FMDatabase * database;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//数据库在沙盒中的路径
NSString * fileName = [[NSSearchPathForDirectoriesInDomains(13, 1, 1)lastObject]stringByAppendingPathComponent:@"testOfFMDB.sqlite"];
NSLog(@"%@",fileName);
//创建数据库
self.database = [[FMDatabase alloc]initWithPath:fileName];
//打开数据库
if ([self.database open]) {
NSLog(@"打开数据库成功");
//创建表 返回值为BOOL
BOOL flag = [self.database executeUpdate:@"create table if not exists t_testOfFMDB (id integer primary key autoincrement,image blob)"];
if (flag) {
NSLog(@"成功建表");
}else{
NSLog(@"失败建表");
}
//关闭数据库
[self.database close];
}else{
NSLog(@"打开数据库失败");
}
}
- (IBAction)insert:(id)sender {
if ([self.database open]) {
NSData * data = UIImageJPEGRepresentation([UIImage imageNamed:@"BG.jpg"], 1);
BOOL flag = [self.database executeUpdate:@"insert into t_testOfFMDB (image) values(?)",data];
if (flag) {
NSLog(@"插入成功");
}else{
NSLog(@"插入失败");
}
}
[self.database close];
}
- (IBAction)delete:(id)sender {
if ([self.database open]) {
BOOL flag = [self.database executeUpdate:@"delete from t_testOfFMDB"];
if (flag) {
NSLog(@"删除成功");
}else{
NSLog(@"删除失败");
}
}
[self.database close];
}
- (IBAction)update:(id)sender {
if ([self.database open]) {
NSData * data = UIImageJPEGRepresentation([UIImage imageNamed:@"CX.jpg"], 1);
BOOL flag = [self.database executeUpdate:@"update t_testOfFMDB set image = ?",data];
if (flag) {
NSLog(@"修改成功");
}else{
NSLog(@"修改失败");
}
}
[self.database close];
}
- (IBAction)select:(id)sender {
if ([self.database open]) {
//返回查询数据的结果集
FMResultSet * resultSet = [self.database executeQuery:@"select * from t_testOfFMDB"];
//查询表中的每一个记录
while ([resultSet next]) {
NSData * data = [resultSet dataForColumn:@"image"];
UIImage * image = [UIImage imageWithData:data];
self.imageView.image = image;
}
}
[self.database close];
}
@end
测试结果
图片(插入后查询)

图片(修改后查询)

图片(删除后查询 由于显示无法证实 这里查看数据库)

iOS FMDB的使用(增,删,改,查,sqlite存取图片)的更多相关文章
- iOS sqlite3 的基本使用(增 删 改 查)
iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...
- 好用的SQL TVP~~独家赠送[增-删-改-查]的例子
以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...
- django ajax增 删 改 查
具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...
- ADO.NET 增 删 改 查
ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访 ...
- MVC EF 增 删 改 查
using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...
- python基础中的四大天王-增-删-改-查
列表-list-[] 输入内存储存容器 发生改变通常直接变化,让我们看看下面列子 增---默认在最后添加 #append()--括号中可以是数字,可以是字符串,可以是元祖,可以是集合,可以是字典 #l ...
- 简单的php数据库操作类代码(增,删,改,查)
这几天准备重新学习,梳理一下知识体系,同时按照功能模块划分做一些东西.所以.mysql的操作成为第一个要点.我写了一个简单的mysql操作类,实现数据的简单的增删改查功能. 数据库操纵基本流程为: 1 ...
- MongoDB增 删 改 查
增 增加单篇文档 > db.stu.insert({sn:'001', name:'lisi'}) WriteResult({ "nInserted" : 1 }) > ...
- Go语言之进阶篇mysql增 删 改 查
一.mysql操作基本语法 1.创建名称nulige的数据库 CREATE DATABASE nulige DEFAULT CHARSET utf8 COLLATE utf8_general_ci; ...
随机推荐
- 如何解读SQL Server日志(2/3)
接下来说说返回的RowLogo Content列,例子中返回了三个列.这些列包含了数据操作的"有效工作负载(Playload)"记录.根据不同操作类型有效负载的内容也是不同的,但是 ...
- HTML知识点01
HTML基础知识回顾 1:ie是浏览器的一种,一般的浏览器只是用到了IE的内盒,知识将IE做了个外包. 2:书写HTML时要按照XML标准类书写.有开始就有结束. 3:HTML种属性单双引号都可以,也 ...
- C# 6.0的属性(Property)的语法与初始值
昨晚有学点新知识,是有关C# 6.0的. 在数据库创建有一张表: CREATE TABLE [dbo].[ToolLocation] ( ,) NOT NULL PRIMARY KEY, ) NOT ...
- 15天玩转redis —— 第三篇 无敌的列表类型
据说60%的人使用redis看重的是redis中的list类型,那这个list有什么用呢???不用我说大家都明白,做队列使用呗,为什么用它呢,很简单呗, 因为有了它我就不需要专门的MQ产品啦,比如说 ...
- iOS 阶段学习第22天笔记(JSON数据格式介绍)
iOS学习(OC语言)知识点整理 一.JSON数据格式 1)概念:json是一种网络数据传输格式,有值/对象:{“A”:1,”B”:”2”…}词典:对象的序列:[,,,,,]数组两种数据类型 2)UR ...
- .NET vs2010中使用IrisSkin2.dll轻松实现winForm窗体换肤功能
IrisSkin2.dll是一款很不错的免费皮肤控件,利用它可以轻松的实现winForm窗体换肤! 网上很多朋友说在VS2010中不能使用IrisSkin2.dll,我这里提供一个取巧的办法. Iri ...
- "Hello World!" for Microsoft Windows
"Hello World!" for Microsoft Windows It's time to write your first application! The follow ...
- jquery取消超链接
- 360手机卫士会影响Widget的运行
最近开发了一个Widget,老是运行时间长了就会出现NullPointerException错误,一直不知道是什么原因造成的,后来把Widget加入360一键清理的保护名单,错误就少很多,但是仍然有错 ...
- 制作Java视频播放器
一.工程准备 首先需要下载并安装VLC播放器,然后下载vlcj外部库. 下载slf4j中的slf4j-api-1.7.13.jar. slf4j- nop-1.7.13.jar 将vlc安装目录下的l ...