FMDB使用的一点心得:数据库创建、制表、查询等以及image转换成二进制nsdata保存到数据库中
版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/u012951123/article/details/36871955
<span style="font-size:18px;">//首先,获取数据库的路径,(假设不存在,就是我们想要存储的路径),不用操心每次都创建数据库会反复,不会的,假设没有则创建,有了就不会再反复创建。
//接下来。我们要制表,首先我们先查看我们的表是否已经存在,方法在以下代码中;假设存在则跳过。不存在则创建</span>
-(void)DataBaseInit
{
//获取Document目录下的数据库文件,没有则创建
NSString *dbPath = [self getDBPath];
FMDatabase *membersDB = [FMDatabase databaseWithPath:dbPath];
if (![membersDB open]) {
NSLog(@"open membersDB failed");
return;
}
//监測数据库中我要须要的表是否已经存在
NSString *existsSql = [NSString stringWithFormat:@"select count(name) as countNum from sqlite_master where type = 'table' and name = '%@'", @"Member" ];
FMResultSet *rs = [membersDB executeQuery:existsSql];
if ([rs next]) {
NSInteger count = [rs intForColumn:@"countNum"];
NSLog(@"The table count: %li", count);
if (count == 1) {
NSLog(@"log_keepers table is existed.");
return;
}
NSLog(@"log_keepers is not existed.");
//创建表
//[membersDB executeUpdate:@"CREATE TABLE PersonList (Name text, Age integer, Sex integer,Phone text, Address text, Photo blob)"];
[membersDB executeUpdate:@"CREATE TABLE Member (Name text, Age integer, Sex integer,Height integer, Weight integer, Photo blob)"];
}
[rs close];
}
-(NSString *)getDBPath
{
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *DBPath = [documentPath stringByAppendingPathComponent:@"members.db"];//成员列表数据库
return DBPath;
}
以下是数据成员的加入。只是我首先检查数据库中我要建的成员是否已经存在,避免反复加入
-(void)doneAction:(UIButton *)button
{
//保存到数据库 membersDB
//获取Document目录下的数据库文件。没有则创建
NSString *dbPath = [self getDBPath];
FMDatabase *membersDB = [FMDatabase databaseWithPath:dbPath];
if (![membersDB open]) {
NSLog(@"open membersDB failed");
return;
}
//返回数据库中第一条满足条件的结果
//select count(name) as countNum from sqlite_master where type = 'table' and name = '%@'", @"log_keepers
FMResultSet *rs =[membersDB executeQuery:@"SELECT COUNT(Name) AS countNum FROM Member WHERE Name = ?
",self.nameTextField.text];
while ([rs next]) {
NSInteger count = [rs intForColumn:@"countNum"];
NSLog(@"countNum == %i",count);
if (count > 0) {
// NSLog(@"你要创建的成员,已经创建同名的!
");
//以下这个是我用的第三方库,用来提醒。非常方便,不用,凝视掉就可以
_noticeView = [[GCDiscreetNotificationView alloc]initWithText:@"成员已经保存 或者 同名成员已存在。" showActivity:YES inPresentationMode:GCDiscreetNotificationViewPresentationModeTop inView:self.view ];
[_noticeView showAndDismissAutomaticallyAnimated];
}
else
{
//出入数据:刚健的成员加入进去
//插入数据
NSData *imageData = UIImagePNGRepresentation(self.iconImageView.image);//将png图片转化为nsdata
BOOL insert = [membersDB executeUpdate:@"INSERT INTO Member (Name, Age, Sex, Height, Weight, Photo) VALUES (?
,?
,?,?
,?,?)",self.nameTextField.text,[NSNumber numberWithInteger:[self.ageTextField.text integerValue]],[NSNumber numberWithInteger:self.sex] ,[NSNumber numberWithInteger:[self.heightTextField.text integerValue]],[NSNumber numberWithInteger:[self.weightTextField.text integerValue]], imageData];
if (insert) {
NSLog(@"加入成员成功!!
");
}
}
}
//关闭数据库
[membersDB close];
}
项目开发过程中,疑惑非常多,fmdb是非常easy操作,对我这样的SQL小白的菜鸟来说,确实摸索了不少时间!等项目完毕,一定要恶补一下数据库的知识!
。
项目还在进行中。。。。。。兴许还会记录晚上有关数据库的操作。
以下是我开发中參考的一些文章:
ios 经常使用sql语句分析。非常精辟:点击打开链接 http://www.cnblogs.com/wengzilin/archive/2012/03/27/2419851.html
iOS开发中使用FMDB解决数据存储问题 :http://witcheryne.iteye.com/blog/1917120
FMDB使用的一点心得:数据库创建、制表、查询等以及image转换成二进制nsdata保存到数据库中的更多相关文章
- net9:图片文件转换成二进制流存入SQL数据库,以及从数据库中读取二进制流输出文件
原文发布时间为:2008-08-10 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...
- 支持“***Context”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。
在用VS进行MVC开发的过程中遇到如下问题: 支持“***Context”上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库(http://go.microsoft ...
- "ApplicationDbContext"(泛指之类的数据库上下文模型)上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库。
一,在我使用自动生成数据库的时候,当你改变了数据库就会出现下面问题 "ApplicationDbContext"(泛指之类的数据库上下文模型)上下文的模型已在数据库创建后发生更改. ...
- System.InvalidOperationException: 支持“XXX”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。
System.InvalidOperationException: 支持“XXX”上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库(http://go.micro ...
- 支持“xxxContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库
将项目的数据库连接用户及密码修改后(切换用户,用户名与原来不一样,用户下对象结构一致),报以下错误: 支持“XXXDBContext”上下文的模型已在数据库创建后发生更改.请考虑使用 Code Fir ...
- 错误:支持“EFDbContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId
支持"EFDbContext"上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/ ...
- 支持“EFDBContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库
在修改数据库表后会出现 支持"EFDBContext"上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库 这个问题解决方法: 在Global.a ...
- C#图片转换成二进制流并且保存到sql server数据库
注意:我要存储文件二进制流的列的类型是text,不是image类型. 我已经实现了从数据库中读取text类型的二进制流,,现在就是不知道怎么存进去. 我的部分关键代码: StreamReader sr ...
- Django数据库创建与查询及ORM的概念
ORM:是封装在pymysql上层的文件.他的作用是把python语句转换成sql语句,从而去数据库里操作数据.从数据库里获得的数据,经过orm转换为对象,对象可以直接调用属性获得值.orm本质是个中 ...
随机推荐
- opencv保存图片路径包含中文乱码解决方案
# coding: utf-8 import numpy as np import cv2 img = cv2.imread('1.jpg',1) cv2.imshow('image', img) k ...
- 大哥带我走渗透8--CSRF的应用
1.大哥给了一个CSRF实战视频,真的很简单,但是我今天晚上有点不在状态,很多简单的问题也没有想.所以做了一个多小时.这件事给我的启发就是,无论发生什么事,都不要影响自己的学习.先写点废话,真的真的, ...
- (转)yum的$releasever真是太反动了
Posted on 2009年 10月9日 by JulyClyde 来看这篇文章的人,大都应该同意<Unix编程艺术>中提到的那些观点吧.今天就给大家看一个反例:yum 的 $relea ...
- Sass--混合宏--声明宏
如果你的整个网站中有几处小样式类似,比如颜色,字体等,在 Sass 可以使用变量来统一处理,那么这种选择还是不错的.但当你的样式变得越来越复杂,需要重复使用大段的样式时,使用变量就无法达到我们目了.这 ...
- java方法执行流程解析
Java程序运行时,必须经过编译和运行两个步骤.首先将后缀名为.java的源文件进行编译,最终生成后缀名为.class的字节码文件.然后Java虚拟机将编译好的字节码文件加载到内存(这个过程被称为类加 ...
- 谈一谈测试驱动开发(TDD)的好处以及你的理解
DD是指在编写真正的功能实现代码之前先写测试代码,然后根据需要重构实现代码.在JUnit的作者Kent Beck的大作<测试驱动开发:实战与模式解析>(Test-Driven Develo ...
- Python3.5-20190503-廖老师-自我笔记
列表和元组 list1 = [1,4,6,788,345,757] tuple1 = (345,234,567,878) 切记你的变量名不能和 hel ...
- jQuery中keyup() 和 keydown()方法
kuydown()方法与上方用法一样:一个按键松开执行代码,一个按键按下执行.
- 重磅干货免费下载!阿里云RDS团队论文被数据库顶会SIGMOD 2018收录
ACM SIGMOD数据管理国际会议是由美国计算机协会(ACM) 数据管理专业委员会(SIGMOD)发起.在数据库领域具有最高学术地位的国际性学术会议. SIGMOD和另外两大数据库会议VLDB.IC ...
- 连载 3:利用 matlab计算卷积