跟教程总结记录
//
// DBManager.h
// SQLite3DBSample
//
// Created by 宝 on 15-3-26.
// Copyright (c) 2015年 rcm. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <sqlite3.h>
@interface DBManager : NSObject
{
NSString *databasePath;
}
+(DBManager*)getSharedInstance;
-(BOOL)createDB;
-(BOOL)saveDB:(NSString*)registerNumber name:(NSString*)name department:(NSString*)department year:(NSString*)year;
-(NSArray*)findByRegisterNumber:(NSString*)registerNumber;
@end
//
// DBManager.m
// SQLite3DBSample
//
// Created by 宝 on 15-3-26.
// Copyright (c) 2015年 rcm. All rights reserved.
//
#import "DBManager.h"
static DBManager *sharedInstance = nil;
static sqlite3 *database = nil;
static sqlite3_stmt *statement = nil;
@implementation DBManager
+(DBManager*)getSharedInstance{
if (!sharedInstance) {
sharedInstance = [[super allocWithZone:NULL] init];
[sharedInstance createDB];
}
return sharedInstance;
}
-(BOOL)createDB{
NSString *docsDir;
NSArray *dirPaths;
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = dirPaths[0];
databasePath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@"student.db"]];
BOOL isSuccess = YES;
NSFileManager *filemgr = [NSFileManager defaultManager];
if ([filemgr fileExistsAtPath:databasePath] == NO) {
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath,&database) == SQLITE_OK) {
char *errMsg;
const char *sql_stmt = "create table if not exists studentsDetail(regno integer primary key,name text,department text, year text)";
if (sqlite3_exec(database, sql_stmt, NULL, NULL, &errMsg)!=SQLITE_OK) {
isSuccess = NO;
NSLog(@"Failed to create table");
}
sqlite3_close(database);
return isSuccess;
}
else{
isSuccess = NO;
NSLog(@"Failed to open/create database");
}
}
return isSuccess;
}
-(BOOL)saveDB:(NSString *)registerNumber name:(NSString *)name department:(NSString *)department year:(NSString *)year{
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &database)==SQLITE_OK) {
NSString *insertSQL = [NSString stringWithFormat:@"insert into studentsDetail(regno,name,department,year) values(\"%d\",\"%@\",\"%@\",\"%@\")",[registerNumber integerValue],name,department,year];
const char *insert_stmt = [insertSQL UTF8String];
sqlite3_prepare_v2(database, insert_stmt, -1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_DONE) {
return YES;
}else{
return NO;
}
sqlite3_reset(statement);
}
return NO;
}
-(NSArray*)findByRegisterNumber:(NSString *)registerNumber{
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &database)==SQLITE_OK) {
NSString *querySQL = [NSString stringWithFormat:@"select name,department,year from studentsDetail where regno='%@'",registerNumber];
const char *query_stmt = [querySQL UTF8String];
NSMutableArray *resultArray = [[NSMutableArray alloc] init];
if (sqlite3_prepare_v2(database, query_stmt, -1, &statement, NULL)==SQLITE_OK) {
if (sqlite3_step(statement)==SQLITE_ROW) {
NSString *name = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)];
[resultArray addObject:name];
NSString *department = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text((statement), 1)];
[resultArray addObject:department];
NSString *year = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text((statement), 2)];
[resultArray addObject:year];
return resultArray;
}
else{
NSLog(@"not found");
return nil;
}
sqlite3_reset(statement);
}
}
return nil;
}
@end
//
// ViewController.h
// SQLite3DBSample
//
// Created by 宝 on 15-3-26.
// Copyright (c) 2015年 rcm. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "DBManager.h"
@interface ViewController : UIViewController{
IBOutlet UITextField *regNoTextField;
IBOutlet UITextField *nameTextField;
IBOutlet UITextField *yearTextField;
IBOutlet UITextField *departmentTextField;
IBOutlet UITextField *findByRegisterTextField;
IBOutlet UIScrollView *myScrollView;
}
-(IBAction)saveData:(id)sender;
-(IBAction)findData:(id)sender;
@end
//
// ViewController.m
// SQLite3DBSample
//
// Created by 宝 on 15-3-26.
// Copyright (c) 2015年 rcm. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()<UITextFieldDelegate>
@end
@implementation ViewController
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)saveData:(id)sender{
BOOL success = NO;
NSString *alertString = @"Data insertion failed";
if (regNoTextField.text.length>0&&nameTextField.text.length>0) {
success = [[DBManager getSharedInstance] saveDB:regNoTextField.text name:nameTextField.text department:departmentTextField.text year:yearTextField.text];
}else{
alertString = @"Enter all fields";
}
if (success) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:alertString message:nil delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
[alert show];
}
}
-(IBAction)findData:(id)sender{
NSArray *data = [[DBManager getSharedInstance] findByRegisterNumber:findByRegisterTextField.text];
if (data==nil) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Data not found" message:nil delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
[alert show];
regNoTextField.text = @"";
nameTextField.text = @"";
departmentTextField.text = @"";
yearTextField.text = @"";
}
else {
regNoTextField.text = findByRegisterTextField.text;
nameTextField.text = [data objectAtIndex:0];
departmentTextField.text = [data objectAtIndex:1];
yearTextField.text = [data objectAtIndex:2];
}
}
-(void)textFieldDidBeginEditing:(UITextField *)textField{
[myScrollView setFrame:CGRectMake(10, 50, 300, 200)];
[myScrollView setContentSize:CGSizeMake(300, 350)];
}
-(void)textFieldDidEndEditing:(UITextField *)textField{
[myScrollView setFrame:CGRectMake(10, 50, 300, 350)];
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
[textField resignFirstResponder];
return YES;
}
@end
跟断点找到数据库存储路径
databasePath NSString * @"/Users/**/Library/Developer/CoreSimulator/Devices/E1639720-DFF1-476A-94AA-41F294A166ED/data/Containers/Data/Application/A044359E-0691-4E38-B6D9-B30EA446ABCB/Documents/student.db" 0x00007fad7c038400
用火狐sqlite manager 或mac 下载sqlite manager