IOS_UI_数据库
2015-09-11 20:23
381 查看
用代码的方式在Xcode中引入数据库,创建学生类加入数据库
代码程序如下:
#import <UIKit/UIKit.h>
@interface AppDelegate :
UIResponder <UIApplicationDelegate>
@property (strong,
nonatomic) UIWindow *window;
@end
#import "AppDelegate.h"
#import "MainViewController.h"
@interface
AppDelegate ()
@end
@implementation AppDelegate
- (void)dealloc
{
[_window release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow
alloc] initWithFrame:[[UIScreen
mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor
whiteColor];
[self.window
makeKeyAndVisible];
[_window release];
MainViewController *main = [[MainViewController
alloc]init];
self.window.rootViewController = main;
[main release];
/*创建 : creat table 表名(列名,类型 primary key(组件的意思 指表内容不能重复))
增加 : insert into 表名 values (,)按创建表里列的顺序写
删除 : delete from 表名 where ( 条件 name = ...)
修改 : update 表名 set(新值)where
update student set name = 'wang' where id = 22 where id = 22
查询 : select * from 表名
select *from student where id = 24
*/
return
YES;
}
#import <UIKit/UIKit.h>
@interface MainViewController :
UIViewController
@end
#import "MainViewController.h"
#import "DBHandler.h"
//@class Student
@interface
MainViewController ()
@end
@implementation MainViewController
- (void)viewDidLoad {
[super
viewDidLoad];
// Do any additional setup after loading the view.
DBHandler *db = [DBHandler
shareInstance];
[db openDB];
//单例对象不能被release
//调用创建表
[db createTable];
// 创建数据
Student *stu = [[Student
alloc]init];
stu.name = @"zahngyang";
stu.number = 22;
[db insertStudent:stu];
[stu release];
NSLog(@"%@",[db
selectAll]);
}
#import <Foundation/Foundation.h>
#import <sqlite3.h>
#import "Student.h"
@interface DBHandler :
NSObject
//成员变量
{
//数据库指针,直接操作本地的数据库文件
sqlite3 *_dbPoint;
}
//单例方法
//引入系统库
+ (DBHandler *)shareInstance;
//打开数据库
- (BOOL)openDB;
//关闭数据库
- (BOOL)closeDB;
//创建表
- (BOOL)createTable;
//增加一条数据
- (BOOL) insertStudent:(Student *)stu;
////删除
//- (BOOL) deleteStudent:(Student *)stu;
////修改
//- (BOOL)updataWithNewStu:(Student *)stu whereNumber:(NSInteger )number;
//查询
- (NSArray *)selectAll;
@end
#import "DBHandler.h"
#import "Student.h"
@implementation DBHandler
+ (DBHandler *)shareInstance
{
//单例方法的实现
// 1. 每一次运行第一次调用这个方法,会创建对象
static DBHandler *dbhandler =
nil;//声明一个空的静态指针
if (dbhandler ==
nil) {
dbhandler = [[DBHandler
alloc]init];
}
// 2. 如果指针不为空 直接返回
return dbhandler;
}
//实现
- (BOOL)openDB
{
//先找数据库文件路径
//取它的文件路径
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES)lastObject];//取出来是数组
//给数据库拼接文件名便于找到
NSString *dbPath = [docPath
stringByAppendingPathComponent:@"qianqian.db"];
NSLog(@"数据库文件路径:%@",dbPath);
//参数1 : 数据库文件路径[dbPath UTF8String]转换NSString转换成char*
//参数2 : (指针指向路径 如果没有文件就创建一个) 数据库指针的地址
//作用 : 按照路径,如果路径下有文件,就给dbPoint赋值;如果没有文件,就创建一个文件给dbPoint赋值
int result = sqlite3_open([dbPath
UTF8String], &_dbPoint);//char * 字符串指针
// //宏
// SQLITE_OK 作用是找错
NSLog(@"结果: %d",result);
// if (result == SQLITE_OK) {
// NSLog(@"打开数据库成功");
// return YES;
//
// }else{
// NSLog(@"打开数据库失败,错误代码: %d",result);
// return NO;
// }
//封装之后可以这么用
[self
judgeResult:result operation:@"打开数据库"];
return
YES;
}
- (BOOL)closeDB
{
int result = sqlite3_close(_dbPoint);
// NSLog(@"结果: %d",result);
// if (result == SQLITE_OK) {
// NSLog(@"打开数据库成功");
// return YES;
//
// }else{
// NSLog(@"打开数据库失败,错误代码: %d",result);
// return NO;
// }
// return YES;
return [self
judgeResult:result operation:@"关闭数据库"];
}
//封装一个结果判断的方法 两个参数一个是结果 另一个是参数
- (BOOL)judgeResult:(int)result operation : (NSString *)name
{
if (result ==
SQLITE_OK) {
NSLog(@"%@成功",name);
return YES;
}else{
NSLog(@"%@失败,错误代码: %d",name,result);
return NO;
}
}
- (BOOL)createTable
{
//1.创建一个sql语句
NSString *sqlStr = [NSString
stringWithFormat:@"create table student (name text,number integer primary key)"];
//2.执行sql语句
// 1.输出指针执行对象 2.执行的语句 3. 函数指针 回调用
int result = sqlite3_exec(_dbPoint, [sqlStr
UTF8String], NULL,
NULL, NULL);
return [self
judgeResult:result operation:@"创建表"];
}
- (BOOL)insertStudent:(Student *)stu
{
NSString *sqlStr = [NSString
stringWithFormat:@"insert into student values ('%@',%ld)",stu.name,stu.number];
int result = sqlite3_exec(_dbPoint, [sqlStr
UTF8String], NULL,
NULL, NULL);
return[self
judgeResult:result operation:@"增加一条数据"];
}
- (NSArray *)selectAll
{
NSString *sqlStr =
@"select * from student";
//参数1 : 数据库指针
//参数2 : sql语句
//参数3 : 限制sql语句的长度,-1就是不限
//参数4 : 数据库状态监视
//作为一个临时的数据库,保存sql语句执行的结果,在结束时集中同步到数据库文件中.
sqlite3_stmt *stmt =
nil;
//作用 : 执行sql语句,将结果保存到stmt中
int result = sqlite3_prepare_v2(_dbPoint, [sqlStr
UTF8String], -1, &stmt,
NULL);
//提取结果
//先创建一个可变数组,准备保存结果
NSMutableArray *stuArr = [NSMutableArray
array];
if (result ==
SQLITE_OK) {
//成功就提取数据
while (sqlite3_step(stmt) ==
SQLITE_ROW) {
//数据处理按列处理,按列提取
//参数1:
//参数2 :第几列
const unsigned
char *nameStr = sqlite3_column_text(stmt,
0);
NSString *name = [NSString
stringWithUTF8String:nameStr];
NSInteger number =
sqlite3_column_int(stmt, 1);
// 创建一个student对象
Student *stu = [[Student
alloc]init];
stu.name = name;
stu.number = number;
// 将对象添加到数组
[stuArr addObject:stu];
[stu release];
}
}
//同步到本地数据库后把指针销毁掉
sqlite3_finalize(stmt);
return stuArr;
}
@end
#import <Foundation/Foundation.h>
@interface Student :
NSObject
@property (nonatomic,retain)NSString *name;
@property (nonatomic,assign)NSInteger number;
@end
#import "Student.h"
@implementation Student
- (void)dealloc
{
[_name release];
[super dealloc];
}
@end
代码程序如下:
#import <UIKit/UIKit.h>
@interface AppDelegate :
UIResponder <UIApplicationDelegate>
@property (strong,
nonatomic) UIWindow *window;
@end
#import "AppDelegate.h"
#import "MainViewController.h"
@interface
AppDelegate ()
@end
@implementation AppDelegate
- (void)dealloc
{
[_window release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow
alloc] initWithFrame:[[UIScreen
mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor
whiteColor];
[self.window
makeKeyAndVisible];
[_window release];
MainViewController *main = [[MainViewController
alloc]init];
self.window.rootViewController = main;
[main release];
/*创建 : creat table 表名(列名,类型 primary key(组件的意思 指表内容不能重复))
增加 : insert into 表名 values (,)按创建表里列的顺序写
删除 : delete from 表名 where ( 条件 name = ...)
修改 : update 表名 set(新值)where
update student set name = 'wang' where id = 22 where id = 22
查询 : select * from 表名
select *from student where id = 24
*/
return
YES;
}
#import <UIKit/UIKit.h>
@interface MainViewController :
UIViewController
@end
#import "MainViewController.h"
#import "DBHandler.h"
//@class Student
@interface
MainViewController ()
@end
@implementation MainViewController
- (void)viewDidLoad {
[super
viewDidLoad];
// Do any additional setup after loading the view.
DBHandler *db = [DBHandler
shareInstance];
[db openDB];
//单例对象不能被release
//调用创建表
[db createTable];
// 创建数据
Student *stu = [[Student
alloc]init];
stu.name = @"zahngyang";
stu.number = 22;
[db insertStudent:stu];
[stu release];
NSLog(@"%@",[db
selectAll]);
}
#import <Foundation/Foundation.h>
#import <sqlite3.h>
#import "Student.h"
@interface DBHandler :
NSObject
//成员变量
{
//数据库指针,直接操作本地的数据库文件
sqlite3 *_dbPoint;
}
//单例方法
//引入系统库
+ (DBHandler *)shareInstance;
//打开数据库
- (BOOL)openDB;
//关闭数据库
- (BOOL)closeDB;
//创建表
- (BOOL)createTable;
//增加一条数据
- (BOOL) insertStudent:(Student *)stu;
////删除
//- (BOOL) deleteStudent:(Student *)stu;
////修改
//- (BOOL)updataWithNewStu:(Student *)stu whereNumber:(NSInteger )number;
//查询
- (NSArray *)selectAll;
@end
#import "DBHandler.h"
#import "Student.h"
@implementation DBHandler
+ (DBHandler *)shareInstance
{
//单例方法的实现
// 1. 每一次运行第一次调用这个方法,会创建对象
static DBHandler *dbhandler =
nil;//声明一个空的静态指针
if (dbhandler ==
nil) {
dbhandler = [[DBHandler
alloc]init];
}
// 2. 如果指针不为空 直接返回
return dbhandler;
}
//实现
- (BOOL)openDB
{
//先找数据库文件路径
//取它的文件路径
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES)lastObject];//取出来是数组
//给数据库拼接文件名便于找到
NSString *dbPath = [docPath
stringByAppendingPathComponent:@"qianqian.db"];
NSLog(@"数据库文件路径:%@",dbPath);
//参数1 : 数据库文件路径[dbPath UTF8String]转换NSString转换成char*
//参数2 : (指针指向路径 如果没有文件就创建一个) 数据库指针的地址
//作用 : 按照路径,如果路径下有文件,就给dbPoint赋值;如果没有文件,就创建一个文件给dbPoint赋值
int result = sqlite3_open([dbPath
UTF8String], &_dbPoint);//char * 字符串指针
// //宏
// SQLITE_OK 作用是找错
NSLog(@"结果: %d",result);
// if (result == SQLITE_OK) {
// NSLog(@"打开数据库成功");
// return YES;
//
// }else{
// NSLog(@"打开数据库失败,错误代码: %d",result);
// return NO;
// }
//封装之后可以这么用
[self
judgeResult:result operation:@"打开数据库"];
return
YES;
}
- (BOOL)closeDB
{
int result = sqlite3_close(_dbPoint);
// NSLog(@"结果: %d",result);
// if (result == SQLITE_OK) {
// NSLog(@"打开数据库成功");
// return YES;
//
// }else{
// NSLog(@"打开数据库失败,错误代码: %d",result);
// return NO;
// }
// return YES;
return [self
judgeResult:result operation:@"关闭数据库"];
}
//封装一个结果判断的方法 两个参数一个是结果 另一个是参数
- (BOOL)judgeResult:(int)result operation : (NSString *)name
{
if (result ==
SQLITE_OK) {
NSLog(@"%@成功",name);
return YES;
}else{
NSLog(@"%@失败,错误代码: %d",name,result);
return NO;
}
}
- (BOOL)createTable
{
//1.创建一个sql语句
NSString *sqlStr = [NSString
stringWithFormat:@"create table student (name text,number integer primary key)"];
//2.执行sql语句
// 1.输出指针执行对象 2.执行的语句 3. 函数指针 回调用
int result = sqlite3_exec(_dbPoint, [sqlStr
UTF8String], NULL,
NULL, NULL);
return [self
judgeResult:result operation:@"创建表"];
}
- (BOOL)insertStudent:(Student *)stu
{
NSString *sqlStr = [NSString
stringWithFormat:@"insert into student values ('%@',%ld)",stu.name,stu.number];
int result = sqlite3_exec(_dbPoint, [sqlStr
UTF8String], NULL,
NULL, NULL);
return[self
judgeResult:result operation:@"增加一条数据"];
}
- (NSArray *)selectAll
{
NSString *sqlStr =
@"select * from student";
//参数1 : 数据库指针
//参数2 : sql语句
//参数3 : 限制sql语句的长度,-1就是不限
//参数4 : 数据库状态监视
//作为一个临时的数据库,保存sql语句执行的结果,在结束时集中同步到数据库文件中.
sqlite3_stmt *stmt =
nil;
//作用 : 执行sql语句,将结果保存到stmt中
int result = sqlite3_prepare_v2(_dbPoint, [sqlStr
UTF8String], -1, &stmt,
NULL);
//提取结果
//先创建一个可变数组,准备保存结果
NSMutableArray *stuArr = [NSMutableArray
array];
if (result ==
SQLITE_OK) {
//成功就提取数据
while (sqlite3_step(stmt) ==
SQLITE_ROW) {
//数据处理按列处理,按列提取
//参数1:
//参数2 :第几列
const unsigned
char *nameStr = sqlite3_column_text(stmt,
0);
NSString *name = [NSString
stringWithUTF8String:nameStr];
NSInteger number =
sqlite3_column_int(stmt, 1);
// 创建一个student对象
Student *stu = [[Student
alloc]init];
stu.name = name;
stu.number = number;
// 将对象添加到数组
[stuArr addObject:stu];
[stu release];
}
}
//同步到本地数据库后把指针销毁掉
sqlite3_finalize(stmt);
return stuArr;
}
@end
#import <Foundation/Foundation.h>
@interface Student :
NSObject
@property (nonatomic,retain)NSString *name;
@property (nonatomic,assign)NSInteger number;
@end
#import "Student.h"
@implementation Student
- (void)dealloc
{
[_name release];
[super dealloc];
}
@end
相关文章推荐
- UI:这段时间的小总结
- iOS开发之 UIAlertView 沙盒 归档
- iOS开发之 UITextField
- Storyboard中segue使用总结
- UE4ShaderPluginDemo
- UITableView Cell上添加按钮后改变选择状态
- iOS开发之 UILabel,UIButton
- 解决错误 Target runtime com.genuitec.runtime.generic.jee60 is not defined.
- iOS开发之 window , UIView
- iOS动态计算UIScrollView的contentSize示例(页面由Label组成)
- UIActivityIndicatorView的使用
- iOS开发-------简单通讯录(UITableView和CoreData的应用)
- HDU 5412——CRB and Queries——————【线段树套Treap(并没有AC)】
- easyui text如何 绑定 鼠标离开时间 及blur 事件
- [Android UI开发] 仿微信/支付宝的密码输入框效果:GridPasswordView
- [Android UI开发] 固定在ScrollView顶部的View,类似于新浪微博的评论列表的顶部
- [Android UI开发] Android常用工具类
- hdoj 1242 Rescue 【bfs】
- UITableView 分页显示、加载更多,数据源远程数据,解析JSON,以及iOS☞Category
- IOS开发UI展示之UITableView ──分页加载更多