嵌入式SQLite3
需要先导入sqlite3 的 api 或 framework。
1 #define kFilename @"data.sqlite3"
2
3 - (void)viewDidLoad
4 {
5 [super viewDidLoad];
6 sqlite3 *database;
7 if(sqlite3_open([[self dataFilePath] UTF8String], &database)!=SQLITE_OK)
8 {
9 sqlite3_close(database);
10 NSAssert(0, @"Failed to open database");
11 }
12
13 NSString *createSQL=@"CREATE TABLE IF NOT EXISTS FIELDS"
14 "(ROW INTEGER PRIMARY KEY , FIELD_DATA TEXT);";
15 char *errorMsg;
16 if(sqlite3_exec(database, [createSQL UTF8String], NULL, NULL, &errorMsg)!=SQLITE_OK)
17 {
18 sqlite3_close(database);
19 NSAssert(0, @"Error creating table: %s",errorMsg);
20 }
21 NSString *query=@"SELECT ROW, FIELD_DATA FROM FIELDS ORDER BY ROW";
22 sqlite3_stmt *statement;
23 if(sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil)==SQLITE_OK)
24 {
25 while (sqlite3_step(statement)==SQLITE_ROW) //移动位置指针
26 {
27 int row=sqlite3_column_int(statement,0);
28 char *rowData=(char *)sqlite3_column_text(statement, 1);
29
30 NSString *fieldName=[[NSString alloc] initWithFormat:@"field%d",row];
31 NSString *fieldValue=[[NSString alloc] initWithUTF8String:rowData];
32 UITextField *field=[self valueForKey:fieldName];
33 field.text=fieldValue;
34 }
35 sqlite3_finalize(statement);
36 }
37 sqlite3_close(database);
38
39
40 UIApplication *app =[UIApplication sharedApplication];
41 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive:) name:UIApplicationWillResignActiveNotification object:app];
42 }
43
44 -(void)applicationWillResignActive:(NSNotification *)notification;
45 {
46 sqlite3 *database;
47 if(sqlite3_open([[self dataFilePath] UTF8String], &database)!=SQLITE_OK)
48 {
49 sqlite3_close(database);
50 NSAssert(0, @"Failed to open database");
51 }
52
53 for (int i=1; i<=4; i++) {
54 NSString *fieldName=[[NSString alloc] initWithFormat:@"field%d",i];
55 UITextField *field=[self valueForKey:fieldName];
56
57 char *updata="INSERT OR REPLACE INTO FIELDS (ROW, FIELD_DATA) VALUES(? , ?);";
58 sqlite3_stmt *stmt;
59 if (sqlite3_prepare_v2(database, updata, -1, &stmt, nil)==SQLITE_OK) {
60 sqlite3_bind_int(stmt, 1, i);
61 sqlite3_bind_text(stmt, 2, [field.text UTF8String],-1,NULL);
62 }
63 if(sqlite3_step(stmt)!=SQLITE_DONE)
64 {
65 NSAssert(0,@"Error updating table.");
66 }
67 sqlite3_finalize(stmt);
68 }
69 sqlite3_close(database);
70 }
沙盒中的Documents文件夹生成data.sqlite3文件(未知直读方法)。
学习有时就像刚才讲述的知识一样, 从开头到最后都需要一个详细的规划过程,达内老师会为大家提供最优良的学习方法,为大家带来不一样的学习天地。