iOS - SQLite Database 操作数据库
Sqlite 能被用在ios上做数据处理用,只要你懂得一点sql 就很容易使用sqlite
1:创建一个简单的View based application2:现在你的项目文件,选择targets 并从库中选择libsqlite3.dylib添加到框架中
3:我们创建一个新的文件 File->New->File->选择Objective C class 并点击next
4:类名称取名为DBManager 子类为NSObject
5:选择创建
6:更新DBManager.h文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#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文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
#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)";
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 ) 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 );
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 ;
} |
8:更新ViewController.xib如图
9:为上面的text fields创建一个IBOutlets
10:为上面按钮创建一个 IBAction
11:更新 ViewController.h文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#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文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
#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 |
最后输出运行结果为:
本文转载自