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 数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到蛇和蛆有什么预兆
- 下一篇: 梦到老同学是什么预兆