iOS UI 18 数据库
//
// RootViewController.m
// Ui - 18 数据库
//
// Created by dllo on 15/12/2.
// Copyright (c) 2015年 dllo. All rights reserved.
//
#import "RootViewController.h"
#import "DataBasehandle.h"
#import "Student.h"
@interface RootViewController ()
@property (retain, nonatomic) IBOutlet UIButton *button;
@property (retain, nonatomic) IBOutlet UIButton *button1;
@property (retain, nonatomic) IBOutlet UIButton *button2;
@property (retain, nonatomic) IBOutlet UIButton *button3;
@property (retain, nonatomic) IBOutlet UIButton *insert;
@property (retain, nonatomic) IBOutlet UIButton *updat;
@property (retain, nonatomic) IBOutlet UIButton *deleteda;
@property (retain, nonatomic) IBOutlet UIButton *button4;
@property (retain, nonatomic) IBOutlet UIButton *button5;
@end
@implementation RootViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"%@",NSHomeDirectory());
// Do any additional setup after loading the view from its nib.
}
//打开数据库
- (IBAction)button:(id)sender {
[[DataBasehandle sharedDatabase] openDB];
}
//关闭数据库
- (IBAction)button1:(id)sender {
[[DataBasehandle sharedDatabase] closeDB];
}
//创建表单
- (IBAction)button2:(id)sender {
[[DataBasehandle sharedDatabase] createTable];
}
//删除表单
- (IBAction)button3:(id)sender {
[[DataBasehandle sharedDatabase] deleteTable];
}
//插入数据
- (IBAction)insert:(id)sender {
Student *stu = [[Student alloc]init];
stu.name = @"dfsa";
stu.sex = @"fdsf";
stu.age = 1;
[[DataBasehandle sharedDatabase] insertDataWithStudent:stu];
}
//修改数据
- (IBAction)updat:(id)sender {
Student *stu = [[Student alloc]init];
stu.name = @"小平好帅";
stu.sex = @"男";
stu.age = 100;
[[DataBasehandle sharedDatabase] updataWithNumber:4 Student:stu];
}
//删除数据
- (IBAction)deleteda:(id)sender {
[[DataBasehandle sharedDatabase] deleteDataWithNumber:2];
}
//查询所有数据
- (IBAction)button4:(id)sender {
NSMutableArray *stuArr = [[DataBasehandle sharedDatabase] selectAllStudent];
for (Student *stu in stuArr) {
NSLog(@"%@ %@ %ld", stu.name, stu.sex, stu.age);
}
}
- (IBAction)button5:(id)sender {
NSMutableArray *stuArr = [[DataBasehandle sharedDatabase]selectBySexOfStudent:@"男" name:@"小平好帅"];
for (Student *stu in stuArr) {
NSLog(@"%@ %@ %ld", stu.name, stu.sex, stu.age);
}
}
- (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.
}
*/
- (void)dealloc {
[_button release];
[_button1 release];
[_button2 release];
[_button3 release];
[_insert release];
[_updat release];
[_deleteda release];
[_button4 release];
[_button5 release];
[super dealloc];
}
@end
//
// DataBasehandle.h
// Ui - 18 数据库
//
// Created by dllo on 15/12/2.
// Copyright (c) 2015年 dllo. All rights reserved.
//
#import <Foundation/Foundation.h>
@class Student;
@interface DataBasehandle : NSObject
+(instancetype)sharedDatabase;
- (void)openDB;
- (void)closeDB;
- (void)createTable;
- (void)deleteTable;
- (void)insertDataWithStudent:(Student *)stu;
- (void)deleteDataWithNumber:(NSInteger)num;
- (void)updataWithNumber:(NSInteger)num Student:(Student *)stu;
- (NSMutableArray *)selectAllStudent;
- (NSMutableArray *)selectBySexOfStudent:(NSString *)sex name :(NSString *)name;
@end
//
// DataBasehandle.m
// Ui - 18 数据库
//
// Created by dllo on 15/12/2.
// Copyright (c) 2015年 dllo. All rights reserved.
//
#import "DataBasehandle.h"
#import "Student.h"
#import <sqlite3.h>
@implementation DataBasehandle
+(instancetype)sharedDatabase
{
static DataBasehandle *dataBase = nil;
if (nil == dataBase) {
dataBase = [[DataBasehandle alloc]init];
}
return dataBase;
}
static sqlite3 *DB = nil;
//sql指令(以Student举例):
//
//创建表单 : @"CREATE TABLE IF NOT EXISTS student(number integer PRIMARY KEY AUTOINCREMENT, name TEXT, sex TEXT, age integer)"
//
//删除表单 : @"DROP TABLE student"
//
//插入数据 : @"INSERT INTO student(name, sex, age) VALUES ('%@', '%@', '%ld')", stu.name, stu.sex, stu.age
//
//删除数据 : @"DELETE FROM student WHERE number = '%ld'", num
//
//修改数据(按num) : @"UPDATE student SET name = '%@', sex = '%@', age = '%ld' WHERE number = '%ld'", stu.name, stu.sex, stu.age, num
//
//查询所有数据 : SELECT * FROM student
//
//按分类查找(按sex) : @"SELECT * FROM student WHERE sex LIKE '%%%@%%'", sex
- (void)openDB
{
NSString *path = [NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString *filepath = [path stringByAppendingPathComponent:@"dataBase.db"];
//打开数据库
//注意将文件路径转为c语言识别的字符串类型
int ret = sqlite3_open(filepath.UTF8String, &DB);
if (SQLITE_OK == ret) {
NSLog(@"打开数据库成功");
} else {
NSLog(@"打开数据库失败");
}
}
- (void)closeDB
{
int ret = sqlite3_close(DB);
if (SQLITE_OK == ret) {
NSLog(@"关闭数据库成功");
} else {
NSLog(@"关闭数据库失败");
}
}
- (void)createTable
{
NSString *sqlStr = @"CREATE TABLE IF NOT EXISTS student(number integer PRIMARY KEY AUTOINCREMENT, name TEXT, sex TEXT, age integer)";
int ret = sqlite3_exec(DB, sqlStr.UTF8String, NULL, NULL, NULL);
if (SQLITE_OK == ret) {
NSLog(@"创建表单成功");
} else {
NSLog(@"创建表单失败");
}
}
- (void)deleteTable
{
NSString *sqlStr = @"DROP TABLE student";
int ret = sqlite3_exec(DB, sqlStr.UTF8String, NULL, NULL, NULL);
if (SQLITE_OK == ret) {
NSLog(@"删除表单成功");
} else {
NSLog(@"删除表单失败");
}
}
- (void)insertDataWithStudent:(Student *)stu
{
NSString *sqlStr = [NSString stringWithFormat:@"INSERT INTO student(name, sex, age) VALUES ('%@', '%@', '%ld')", stu.name, stu.sex, stu.age];
int ret = sqlite3_exec(DB, sqlStr.UTF8String, NULL, NULL, NULL);
if (SQLITE_OK == ret) {
NSLog(@"插入数据成功");
} else {
NSLog(@"插入数据失败");
}
}
- (void)deleteDataWithNumber:(NSInteger)num
{
NSString *sqlstr = [NSString stringWithFormat: @"DELETE FROM student WHERE number = '%ld'", num];
int ret = sqlite3_exec(DB, sqlstr.UTF8String, NULL, NULL, NULL);
if (SQLITE_OK == ret) {
NSLog(@"删除数据成功");
} else {
NSLog(@"删除数据失败");
}
}
- (void)updataWithNumber:(NSInteger)num Student:(Student *)stu
{
NSString *sqlstr = [NSString stringWithFormat: @"UPDATE student SET name = '%@', sex = '%@', age = '%ld' WHERE number = '%ld'", stu.name, stu.sex, stu.age, num];
int ret = sqlite3_exec(DB, sqlstr.UTF8String, NULL, NULL, NULL);
if (SQLITE_OK == ret) {
NSLog(@"修改数据成功");
} else {
NSLog(@"修改数据失败");
}
}
- (NSMutableArray *)selectAllStudent
{
NSString *sqlstr = @"SELECT * FROM student";
sqlite3_stmt *stmt = nil;
int ret = sqlite3_prepare_v2(DB, sqlstr.UTF8String, -1, &stmt, NULL);
if (SQLITE_OK == ret) {
NSMutableArray *arr = [NSMutableArray array];
//判断是否还有有效数据
while (SQLITE_ROW == sqlite3_step(stmt)) {
//参数:列数
const unsigned char *name = sqlite3_column_text(stmt, 1);
const unsigned char *sex = sqlite3_column_text(stmt, 2);
sqlite3_int64 age = sqlite3_column_int(stmt, 3);
Student *stu = [[Student alloc]init];
// stu.name = name;
stu.name = [NSString stringWithUTF8String:(const char *)name];
stu.sex = [NSString stringWithUTF8String:(const char *)sex];
//整型可以直接强转
stu.age = (NSInteger)age;
[arr addObject:stu];
[stu release];
}
return arr;
} else {
NSLog(@"获取数据失败");
return nil;
}
}
- (NSMutableArray *)selectBySexOfStudent:(NSString *)sex name:(NSString *)name
{
NSString *sqlstr = [NSString stringWithFormat: @"SELECT * FROM student WHERE sex LIKE '%%%@%%' and name = '%@'", sex, name ];
sqlite3_stmt *stmt = nil;
int ret = sqlite3_prepare_v2(DB, sqlstr.UTF8String, -1, &stmt, NULL);
if (SQLITE_OK == ret) {
NSMutableArray *arr = [NSMutableArray array];
//判断是否还有有效数据
while (SQLITE_ROW == sqlite3_step(stmt)) {
//参数:列数
const unsigned char *name = sqlite3_column_text(stmt, 1);
const unsigned char *sex = sqlite3_column_text(stmt, 2);
sqlite3_int64 age = sqlite3_column_int(stmt, 3);
Student *stu = [[Student alloc]init];
// stu.name = name;
stu.name = [NSString stringWithUTF8String:(const char *)name];
stu.sex = [NSString stringWithUTF8String:(const char *)sex];
//整型可以直接强转
stu.age = (NSInteger)age;
[arr addObject:stu];
[stu release];
}
return arr;
} else {
NSLog(@"获取数据失败");
return nil;
}
}
@end
//
// Student.h
// Ui - 18 数据库
//
// Created by dllo on 15/12/2.
// Copyright (c) 2015年 dllo. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property (nonatomic, copy)NSString *name;
@property (nonatomic, copy)NSString *sex;
@property (nonatomic, assign)NSInteger age;
@end
//
// Student.m
// Ui - 18 数据库
//
// Created by dllo on 15/12/2.
// Copyright (c) 2015年 dllo. All rights reserved.
//
#import "Student.h"
@implementation Student
- (void)dealloc
{
[_name release];
[_sex release];
[super dealloc];
}
@end
转载于:https://www.cnblogs.com/yuhaojishuboke/p/5043070.html
iOS UI 18 数据库相关推荐
- IOS UI开发基础之超级猜图完整版本-08
IOS UI开发基础之超级猜图完整版本-08 // // ViewController.m // 09-超级猜图 // // Created by 鲁军 on 2021/1/31. //#import ...
- iOS UI 开发按钮的使用
IOS UI 开发之按钮的使用 // // ViewController.m // 02按钮的使用介绍 // // Created by 鲁军 on 2021/1/26. //#import &quo ...
- 基于 KIF 的 iOS UI 自动化测试和持续集成
客户端 UI 自动化测试是大多数测试团队的研究重点,本文介绍猫眼测试团队在猫眼 iOS 客户端实践的基于 KIF 的 UI 自动化测试和持续集成过程. 一.测试框架的选择 iOS UI 自动化测试框架 ...
- IOS UI Automation 学习之常用类,方法和模拟手势
为什么80%的码农都做不了架构师?>>> IOS UI Automation 学习之常用类,方法和模拟手势 常用类结构图 作者不擅长作画,如果有好的画此类图形的工具,可以留言, ...
- android 布局可大可小,UI设计教程之:ios与android ui适配(将IOS UI转换成Android经验畅谈)...
内容提要:这是UI设计系列教程之ios与android ui适配经验畅谈.文章作者介绍了自己将IOS UI转换成Android经验,包括:不要直接转换.了解单位和组件缩放格式.屏幕尺寸DP和像素的换算 ...
- ios ui自动化测试_Xcuitest的ios自动化ui测试
ios ui自动化测试 Who knew automated UI Testing could be so easy! Well, I guess Apple did. Automated UI Te ...
- iOS UI 之聊天室渐变蒙层效果
iOS UI 开发中,我们已接触过不少 layer 相关设置,如常见设置按钮的圆角效果 UIButton *button = [UIButton buttonWithType:UIButtonType ...
- iOS编程------SQLite / 数据库
/* # Sqlite3## 创建数据库方法 ## 一.终端命令进入到 /Users/wushumin/Documents/Sqlite 文件夹下. > cd Documents/Sqlite ...
- [iOS UI设计笔记整理汇总]
8.UIsearchbar放到Navigationbar 上(意思是建个View作为titleview) //此处调用的是第三方封装的SearchBar,也可以自定义. self.searchBarW ...
最新文章
- android测试之monkey测试
- android 之数据存储(IO)
- 女孩看男孩VS男孩看女孩
- linux中文件属性mtime,linux stat (三个时间属性命令可用来列出文件的 atime、ctime 和 mtime。)...
- js中的extend的用法及其JS中substring与substr的区别
- cardsui-for-android
- busybox订制小型linux(二)
- oracle账号密码修改后特别容易锁定_Oracle数据库用户锁定原因以及处理方式(ORA-28000)...
- Virtio-blk Performance Improvement
- ES6新特性_const声明常量以及特点---JavaScript_ECMAScript_ES6-ES11新特性工作笔记005
- dom4j获取指定节点值_XML解析之DOM4j以及XPATH技术
- zeromq源码分析笔记之架构
- 环保工位机重装系统需要备份的文件
- 详解java定时任务
- PWA--未来式app
- QString中如何设置上下角标(Qt)
- 如何给网页设置logo
- 蓝桥杯-决赛B组第七届java
- 产生唯一的id(idworker工具类)
- 一个近乎完美的Unity全平台原生c#热更方案
热门文章
- python函数 global_Python global全局变量函数详解
- mysql 密码sha256_MySQL5.6启用sha256_password插件
- uva 10271——Chopsticks
- Zoj 2947——Abbreviation
- 汉诺塔V - ACM解决方法
- Redis源码分析(零)学习路径笔记
- 在使用 python 封装的进程池 from concurrent.futures import ProcessPoolExecutor 遇到的问题
- 使用头文件的原因和规范
- 【Linux系统编程学习】 静态库与动态库的对比与总结
- 【计算机网络实验·北航】实验一:网络实验入门(1)