//

//  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 数据库相关推荐

  1. IOS UI开发基础之超级猜图完整版本-08

    IOS UI开发基础之超级猜图完整版本-08 // // ViewController.m // 09-超级猜图 // // Created by 鲁军 on 2021/1/31. //#import ...

  2. iOS UI 开发按钮的使用

    IOS UI 开发之按钮的使用 // // ViewController.m // 02按钮的使用介绍 // // Created by 鲁军 on 2021/1/26. //#import &quo ...

  3. 基于 KIF 的 iOS UI 自动化测试和持续集成

    客户端 UI 自动化测试是大多数测试团队的研究重点,本文介绍猫眼测试团队在猫眼 iOS 客户端实践的基于 KIF 的 UI 自动化测试和持续集成过程. 一.测试框架的选择 iOS UI 自动化测试框架 ...

  4. IOS UI Automation 学习之常用类,方法和模拟手势

    为什么80%的码农都做不了架构师?>>>    IOS UI Automation 学习之常用类,方法和模拟手势 常用类结构图 作者不擅长作画,如果有好的画此类图形的工具,可以留言, ...

  5. android 布局可大可小,UI设计教程之:ios与android ui适配(将IOS UI转换成Android经验畅谈)...

    内容提要:这是UI设计系列教程之ios与android ui适配经验畅谈.文章作者介绍了自己将IOS UI转换成Android经验,包括:不要直接转换.了解单位和组件缩放格式.屏幕尺寸DP和像素的换算 ...

  6. ios ui自动化测试_Xcuitest的ios自动化ui测试

    ios ui自动化测试 Who knew automated UI Testing could be so easy! Well, I guess Apple did. Automated UI Te ...

  7. iOS UI 之聊天室渐变蒙层效果

    iOS UI 开发中,我们已接触过不少 layer 相关设置,如常见设置按钮的圆角效果 UIButton *button = [UIButton buttonWithType:UIButtonType ...

  8. iOS编程------SQLite / 数据库

    /* # Sqlite3## 创建数据库方法 ## 一.终端命令进入到 /Users/wushumin/Documents/Sqlite 文件夹下. > cd Documents/Sqlite ...

  9. [iOS UI设计笔记整理汇总]

    8.UIsearchbar放到Navigationbar 上(意思是建个View作为titleview) //此处调用的是第三方封装的SearchBar,也可以自定义. self.searchBarW ...

最新文章

  1. android测试之monkey测试
  2. android 之数据存储(IO)
  3. 女孩看男孩VS男孩看女孩
  4. linux中文件属性mtime,linux stat (三个时间属性命令可用来列出文件的 atime、ctime 和 mtime。)...
  5. js中的extend的用法及其JS中substring与substr的区别
  6. cardsui-for-android
  7. busybox订制小型linux(二)
  8. oracle账号密码修改后特别容易锁定_Oracle数据库用户锁定原因以及处理方式(ORA-28000)...
  9. Virtio-blk Performance Improvement
  10. ES6新特性_const声明常量以及特点---JavaScript_ECMAScript_ES6-ES11新特性工作笔记005
  11. dom4j获取指定节点值_XML解析之DOM4j以及XPATH技术
  12. zeromq源码分析笔记之架构
  13. 环保工位机重装系统需要备份的文件
  14. 详解java定时任务
  15. PWA--未来式app
  16. QString中如何设置上下角标(Qt)
  17. 如何给网页设置logo
  18. 蓝桥杯-决赛B组第七届java
  19. 产生唯一的id(idworker工具类)
  20. 一个近乎完美的Unity全平台原生c#热更方案

热门文章

  1. python函数 global_Python global全局变量函数详解
  2. mysql 密码sha256_MySQL5.6启用sha256_password插件
  3. uva 10271——Chopsticks
  4. Zoj 2947——Abbreviation
  5. 汉诺塔V - ACM解决方法
  6. Redis源码分析(零)学习路径笔记
  7. 在使用 python 封装的进程池 from concurrent.futures import ProcessPoolExecutor 遇到的问题
  8. 使用头文件的原因和规范
  9. 【Linux系统编程学习】 静态库与动态库的对比与总结
  10. 【计算机网络实验·北航】实验一:网络实验入门(1)