SQLite可以在iOS中用于处理数据。它使用sqlite查询,这对于那些了解SQL的人来说更加容易。
涉及步骤
步骤1 - 创建一个简单的基于视图的应用程序。
步骤2 - 选择您的项目文件,然后选择目标,然后在选择框架中添加 libsqlite3.dylib 库。
步骤3 - 选择"File"→"New"→"File...",然后选择"Objective C class" ,然后单击"Next"。
步骤4 - 将类命名为 DBManager ,将" sub class of"作为NSObject。
步骤5 - 选择创建。
步骤6 - 如下更新 DBManager.h -
#import <Foundation/Foundation.h> #import <sqlite3.h>@interface DBManager : NSObject { NSString *databasePath; }
+(DBManager)getSharedInstance; -(BOOL)createDB; -(BOOL) saveData:(NSString)registerNumber name:(NSString)name department:(NSString)department year:(NSString)year; -(NSArray) findByRegisterNumber:(NSString*)registerNumber;
@end
步骤7 - 如下更新 DBManager.m -
#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;
//Get the documents directory
dirPaths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = dirPaths[0];
//Build the path to the database file
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)";
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">sqlite3_exec</span><span class="pun">(</span><span class="pln">database</span><span class="pun">,</span><span class="pln"> sql_stmt</span><span class="pun">,</span><span class="pln"> NULL</span><span class="pun">,</span><span class="pln"> NULL</span><span class="pun">,</span><span class="pln"> </span><span class="pun">&</span><span class="pln">errMsg</span><span class="pun">)</span><span class="pln"> </span><span class="pun">!=</span><span class="pln"> SQLITE_OK</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
isSuccess </span><span class="pun">=</span><span class="pln"> NO</span><span class="pun">;</span><span class="pln">
</span><span class="typ">NSLog</span><span class="pun">(@</span><span class="str">"Failed to create table"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
sqlite3_close</span><span class="pun">(</span><span class="pln">database</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> isSuccess</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
isSuccess </span><span class="pun">=</span><span class="pln"> NO</span><span class="pun">;</span><span class="pln">
</span><span class="typ">NSLog</span><span class="pun">(@</span><span class="str">"Failed to open/create database"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
}
return isSuccess;
}
- (BOOL) saveData:(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);
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">sqlite3_step</span><span class="pun">(</span><span class="pln">statement</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> SQLITE_DONE</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> YES</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> NO</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
sqlite3_reset</span><span class="pun">(</span><span class="pln">statement</span><span class="pun">);</span><span class="pln">
}
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];
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">sqlite3_prepare_v2</span><span class="pun">(</span><span class="pln">database</span><span class="pun">,</span><span class="pln"> query_stmt</span><span class="pun">,</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="pun">&</span><span class="pln">statement</span><span class="pun">,</span><span class="pln"> NULL</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> SQLITE_OK</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">sqlite3_step</span><span class="pun">(</span><span class="pln">statement</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> SQLITE_ROW</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="typ">NSString</span><span class="pln"> </span><span class="pun">*</span><span class="pln">name </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[[</span><span class="typ">NSString</span><span class="pln"> alloc</span><span class="pun">]</span><span class="pln"> initWithUTF8String</span><span class="pun">:</span><span class="pln">
</span><span class="pun">(</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">char</span><span class="pln"> </span><span class="pun">*)</span><span class="pln"> sqlite3_column_text</span><span class="pun">(</span><span class="pln">statement</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)];</span><span class="pln">
</span><span class="pun">[</span><span class="pln">resultArray addObject</span><span class="pun">:</span><span class="pln">name</span><span class="pun">];</span><span class="pln">
</span><span class="typ">NSString</span><span class="pln"> </span><span class="pun">*</span><span class="pln">department </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[[</span><span class="typ">NSString</span><span class="pln"> alloc</span><span class="pun">]</span><span class="pln"> initWithUTF8String</span><span class="pun">:</span><span class="pln">
</span><span class="pun">(</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">char</span><span class="pln"> </span><span class="pun">*)</span><span class="pln"> sqlite3_column_text</span><span class="pun">(</span><span class="pln">statement</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">)];</span><span class="pln">
</span><span class="pun">[</span><span class="pln">resultArray addObject</span><span class="pun">:</span><span class="pln">department</span><span class="pun">];</span><span class="pln">
</span><span class="typ">NSString</span><span class="pln"> </span><span class="pun">*</span><span class="pln">year </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[[</span><span class="typ">NSString</span><span class="pln"> alloc</span><span class="pun">]</span><span class="pln">initWithUTF8String</span><span class="pun">:</span><span class="pln">
</span><span class="pun">(</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">char</span><span class="pln"> </span><span class="pun">*)</span><span class="pln"> sqlite3_column_text</span><span class="pun">(</span><span class="pln">statement</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)];</span><span class="pln">
</span><span class="pun">[</span><span class="pln">resultArray addObject</span><span class="pun">:</span><span class="pln">year</span><span class="pun">];</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> resultArray</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="typ">NSLog</span><span class="pun">(@</span><span class="str">"Not found"</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">nil</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
sqlite3_reset</span><span class="pun">(</span><span class="pln">statement</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
}
return nil;
}
步骤8 - 如下更新 ViewController.xib 文件-

步骤9 - 为上述文本字段创建IBOutlet。
步骤10 - 为上述按钮创建IBAction。
步骤11 - 如下更新 ViewController.h -
#import <UIKit/UIKit.h> #import "DBManager.h"@interface ViewController : UIViewController<UITextFieldDelegate> { IBOutlet UITextField regNoTextField; IBOutlet UITextField nameTextField; IBOutlet UITextField departmentTextField; IBOutlet UITextField yearTextField; IBOutlet UITextField findByRegisterNumberTextField; IBOutlet UIScrollView myScrollView; }
-(IBAction)saveData:(id)sender; -(IBAction)findData:(id)sender; @end
步骤12 - 如下更新 ViewController.m -
#import "ViewController.h"@interface ViewController () @end
@implementation ViewController
- (id)initWithNibName:(NSString )nibNameOrNil bundle:(NSBundle ) nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) { //Custom initialization } return self; }
- (void)viewDidLoad { [super viewDidLoad]; //Do any additional setup after loading the view from its nib. }
- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; //Dispose of any resources that can be recreated. }
-(IBAction)saveData:(id)sender { BOOL success = NO; NSString *alertString = @"Data Insertion failed";
if (regNoTextField.text.length>0 &&nameTextField.text.length>0 && departmentTextField.text.length>0 &&yearTextField.text.length>0 ) { success = [[DBManager getSharedInstance]saveData: regNoTextField.text name:nameTextField.text department: departmentTextField.text year:yearTextField.text]; } else { alertString = @"Enter all fields"; }
if (success == NO) { UIAlertView *alert = [[UIAlertView alloc]initWithTitle: alertString message:nil delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; } }
-(IBAction)findData:(id)sender { NSArray *data = [[DBManager getSharedInstance]findByRegisterNumber: findByRegisterNumberTextField.text];
if (data == nil) { UIAlertView *alert = [[UIAlertView alloc]initWithTitle: @"Data not found" message:nil delegate:nil cancelButtonTitle: @"OK" otherButtonTitles:nil]; [alert show]; regNoTextField.text = @""; nameTextField.text =@""; departmentTextField.text = @""; yearTextField.text =@""; } else { regNoTextField.text = findByRegisterNumberTextField.text; nameTextField.text =[data objectAtIndex:0]; departmentTextField.text = [data objectAtIndex:1]; yearTextField.text =[data objectAtIndex:2]; } }
#pragma mark - Text field delegate -(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
运行应用程序时,无涯教程将获得以下输出,无涯教程可以在其中添加并找到学生详细信息-