ui学习笔记---第十五天数据库
数据库的使用
常见的数据库有MySQL SQL Server SQLite Oralce等
在iOS开发中通常使用SQLite数据库,这是一个轻量级的数据库,可以在火狐浏览器的工具中创建一个SQLite数据库,并创建表
(1)数据记录筛选:
sql="select * from 数据表 where 字段名=字段值 orderby 字段名 [desc] "
sql="select * from 数据表 where 字段名 like '%字段值%' orderby 字段名 [desc]"
sql="select top10 * from 数据表 where 字段名 orderby 字段名[desc]"
sql="select * from 数据表 where 字段名 in('值1','值2','值3')"
sql="select * from 数据表 where 字段名 between 值1 and 值 2"
(2)更新数据记录:
sql="update 数据表 set 字段名=字段值 where 条件表达式"
sql="update 数据表 set 字段1=值1,字段2=值2……字段n=值n where 条件表达式"
(3)删除数据记录:
sql="delete from 数据表 where 条件表达式"
sql="delete from 数据表 "(将数据表所有记录删除)
(4)添加数据记录:
sql="insert into 数据表(字段1,字段2,字段3…) values(值1,值2,值3…)"
sql="insert into 目标数据表 select * from 源数据表"(把源数据表的记录添加到目标数据表)
建立数据库类DB (DB.h DB.m)
其中有两个方法 打开数据库方法和关闭数据库方法
//DB.h
#import <Foundation/Foundation.h>
#import <sqlite3.h>
@interface DB : NSObject
//打开数据库
+ (sqlite3 *)open;
//关闭数据库
+ (void)close; @end
//DB.m
#import "DB.h"
#define kDocuments [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
@implementation DB
//打开数据库
//创建一个sqlite3的静态变量
static sqlite3 *db = nil;
+ (sqlite3 *)open
{
//db不为空,不用再打开db了 if (db != nil) {
return db;
}
//在documents文件夹内建一个Students.sqlite文件路径
NSString *filePath = [kDocuments stringByAppendingPathComponent:@"Students.sqlite"];
//包路径
NSString *file = [[NSBundle mainBundle] pathForResource:@"Students" ofType:@"sqlite"];
//创建一个文件管理器
NSFileManager *fileManager =[NSFileManager defaultManager];
//使用文件控制器把包路径数据库拷贝到documents文件夹内 if ([fileManager fileExistsAtPath:filePath]==NO) { //判断documents是否已经存在Students.sqlite文件 ,不存在就拷贝
[fileManager copyItemAtPath:file toPath:filePath error:nil];
}
//sqlite3自带的打开数据库方法 filePath从oc字符串转换为c字符串,调用UTF8String方法
sqlite3_open([filePath UTF8String], &db);
NSLog(@"%@",filePath);
return db; }
//关闭数据库
+ (void)close
{
//调用sqlite3自己方法关闭数据库
sqlite3_close(db);
//db置为空
db = nil;
}
@end
数据管理类StudentManager (StudentManager.h StudentManager.m)
//StudentManager.h
#import <Foundation/Foundation.h> @interface StudentManager : NSObject //- (void)insertName:(NSString *)name Age:(NSString *)age;
- (void)insertName:(NSString *)name Age:(NSInteger)age;
//- (void)select;
- (void)delete:(NSString *)name;
- (void)print;
- (void)update:(NSString *)sex age:(int)age sID:(int)sID;
- (void)updateAge:(NSInteger)age ID:(NSInteger)number;
@end
//StudentManager.m#import "StudentManager.h"
#import "DB.h"
@implementation StudentManager //- (void)insertName:(NSString *)name Age:(NSString *)age
//{
// //打开数据库
// sqlite3 *db = [DB open];
//
// //执行插入操作(向表中插入数据)
// //stmt 用于存放 执行结果(例如,select 查询到得结果)
// sqlite3_stmt *stmt = nil;
// //flag 用于检测 prepare 的结果
// NSString *sql = [NSString stringWithFormat:@"insert into 'BJS140523'(sName,sAge) values (\"%@\",%@)",name,age ];
// int flag = sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, nil);
// NSLog(@"%d",flag);
// if (flag == SQLITE_OK) {
// //执行stmt, 如果SQL是select,sqlite3_step就是获取查到的结果
// //如果SQL是insert 或者update或者delete sqlite3_step就是执行SQL
// sqlite3_step(stmt);
// }
// //释放SQL执行过程中开辟的内存(释放资源)
// sqlite3_finalize(stmt);
//
// //关闭数据库
//// [DB close];
//}
- (void)insertName:(NSString *)name Age:(NSInteger)age
{
//打开数据库
sqlite3 *db = [DB open]; //执行插入操作(向表中插入数据)
//stmt 用于存放 执行结果(例如,select 查询到得结果)
sqlite3_stmt *stmt = nil;
//flag 用于检测 prepare 的结果
NSString *sql = [NSString stringWithFormat:@"insert into 'BJS140523'(sName,sAge) values (\"%@\",%d)",name,age ];
int flag = sqlite3_prepare_v2(db, [sql UTF8String], -, &stmt, nil);
NSLog(@"%d",flag);
if (flag == SQLITE_OK) {
//执行stmt, 如果SQL是select,sqlite3_step就是获取查到的结果
//如果SQL是insert 或者update或者delete sqlite3_step就是执行SQL
sqlite3_step(stmt);
}
//释放SQL执行过程中开辟的内存(释放资源)
sqlite3_finalize(stmt); //关闭数据库
// [DB close];
} //- (void)select
//{
// sqlite3 *db = [DB open];
//}
- (void)delete:(NSString *)name
{
sqlite3 *db = [DB open];
sqlite3_stmt *stmt = nil;
NSString *sql = [NSString stringWithFormat:@"delete from 'BJS140523' where sName = \"%@\"",name];
int flog = sqlite3_prepare_v2(db, [sql UTF8String], -, &stmt, nil);
NSLog(@"%d",flog);
if (flog == SQLITE_OK) {
sqlite3_step(stmt);
}
sqlite3_finalize(stmt);
}
- (void)print
{
//打开数据库
sqlite3 *db = [DB open];
//执行查询
sqlite3_stmt *stmt = nil;
int flog = sqlite3_prepare_v2(db, "select * from 'BJS140523'", -, &stmt, nil);
if (flog == SQLITE_OK) {
//定义可变数组
//如果取到数据,执行while,如果取不到数据,while的条件就是假
while (sqlite3_step(stmt) == SQLITE_ROW) {
//列的编号从0开始
int sID = sqlite3_column_int(stmt, );
const unsigned char *sName = sqlite3_column_text(stmt, );
int sAge = sqlite3_column_int(stmt, );
const unsigned char *sSex = sqlite3_column_text(stmt, );
NSString *name = [NSString stringWithUTF8String:(const char *)sName];
NSString *sex = [NSString stringWithUTF8String:(const char *)sSex];
NSLog(@"%d %@ %d %@",sID,name,sAge,sex);
//创建学生对象
//添加到数组中
//学生对象release
}
sqlite3_finalize(stmt);
}
//关闭数据库
// [DB close];
}
- (void)update:(NSString *)sex age:(int)age sID:(int)sID
{
//打开数据库
sqlite3 *db = [DB open];
//执行更新
sqlite3_stmt *stmt = nil;
int flog = sqlite3_prepare_v2(db, "update BJS140523 set sSex = ?,sAge = ? where sID = ?", -, &stmt, nil);
if (flog == SQLITE_OK) {
//问号是从1开始的
sqlite3_bind_text(stmt, , [sex UTF8String], -, NULL);
sqlite3_bind_int(stmt, , age);
sqlite3_bind_int(stmt, , sID);
sqlite3_step(stmt);
}
sqlite3_finalize(stmt);
//关闭数据库
// [DB close];
}
- (void)updateAge:(NSInteger)age ID:(NSInteger)number
{
//打开数据库
sqlite3 *db = [DB open];
//执行更新
sqlite3_stmt *stmt = nil;
NSString *sql = [NSString stringWithFormat:@"update BJS140523 set sAge = %d where sID = %d",age,number];
int flog = sqlite3_prepare_v2(db, [sql UTF8String], -, &stmt, nil);
if (flog == SQLITE_OK) {
sqlite3_step(stmt);
}
sqlite3_finalize(stmt);
// sqlite3_exec(<#sqlite3 *#>, <#const char *sql#>, <#int (*callback)(void *, int, char **, char **)#>, <#void *#>, <#char **errmsg#>)
//关闭数据库
// [DB class];
}
@end
ui学习笔记---第十五天数据库的更多相关文章
- iOS学习笔记(十五)——数据库操作(SQLite)
SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的 ...
- 【转】iOS学习笔记(十五)——数据库操作(SQLite)
SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的 ...
- Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...
- [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...
- Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例
前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...
- VSTO学习笔记(十五)Office 2013 初体验
原文:VSTO学习笔记(十五)Office 2013 初体验 Office 2013 近期发布了首个面向消费者的预览版本,我也于第一时间进行了更新试用.从此开始VSTO系列全面转向Office 201 ...
- python3.4学习笔记(二十五) Python 调用mysql redis实例代码
python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...
- 如鹏网学习笔记(十五)ASP.NET MVC核心基础笔记
一.ASP.Net MVC简介 1,什么是ASP.NET MVC? HttpHandler是ASP.net的底层机制,如果直接使用HttpHandler进行开发难度比较大.工作量大.因此提供了ASP. ...
- Android学习笔记(十六)——数据库操作(上)
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! Android 为了让我们能够更加方便地管理数据库,专门提供了一个 SQLiteOpenHelper帮助类, ...
随机推荐
- 如何在Hadoop的MapReduce程序中处理JSON文件
简介: 最近在写MapReduce程序处理日志时,需要解析JSON配置文件,简化Java程序和处理逻辑.但是Hadoop本身似乎没有内置对JSON文件的解析功能,我们不得不求助于第三方JSON工具包. ...
- js基础之ajax
必须搞懂的几个问题: 1.如何创建ajax对象? 2.如何连接服务器? 3.如何发送请求? 4.监控请求状态的事件是什么?分几个阶段?如何获取返回值? 答:onreadystatechange事件:一 ...
- ubuntu 14.04 难用的vi
在插入状态下,按方向键出来的结果竟然是大写的字母ABCD,这是因为在ubuntu中其实没装vi,只装了vim-tiny,在系统上,vi仅仅是vim的一个别名. 这时候需要自己安装完整版的 vim su ...
- [开发笔记]-获取歌曲ID3信息
ID3介绍: ID3,一般是位于一个mp3文件的开头或末尾的若干字节内,附加了关于该mp3的歌手,标题,专辑名称,年代,风格等信息,该信息就被称为ID3信息,ID3信息分为两个版本,v1和v2版. 获 ...
- 支持多人协作的在线免费作图工具:ProcessOn
之前朋友给我推荐一款作图工具ProcessOn,出于好奇我就研究了一下它,今天我就给大家简单介绍一下这款免费的在线作图工具:ProcessOn 首先使用ProcessOn我们需要有一个帐号,这样每次操 ...
- 推荐可以代替Visio的HTML开发的作图工具:ProcessOn
过去作图的时候一直都是在用visio,每一次换了电脑使用都要重新安装,这大家都知道,最头疼的就是激活问题,曾经因为激活问题我“找遍了”正个互联网,最后还没找到...从08年开始到现在,visio用了这 ...
- gsoap框架下的onvif程序流程分析
SOAP_FMAC5 int SOAP_FMAC6 soap_serve(struct soap *soap) { do { unsigned int k = soap->max_keep_al ...
- 使用SharedPreferences进行数据存储
使用SharedPreferences进行数据存储 很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友.对于软件配置参数的保存,如果是w ...
- SharePoint 2013 Nintex Workflow 工作流帮助(五)
博客地址 http://blog.csdn.net/foxdave 工作流动作 4. Assign To-Do Task(User interaction分组) 直观理解,指派待办任务给一个或多个用户 ...
- 【iOS开发】企业版证书($299)In-House方式发布指南 (转)
一.明确几个概念 1.企业版IDP:即iOS Development Enterprise Program.注意是$299/Year那种,并不是$99/Year的那种. 2.In House:是只企业 ...