ios sqlite数据库操作
1 @interface MyViewController () {
2 // 数据库实例,代表着整个数据库
3 sqlite3 *_db;
4 }
5 @end
6
7 @implementation MyViewController
8
9 - (void)viewDidLoad
10 {
11 [super viewDidLoad];
12
13 [self openDB];
14
15 [self createTables];
16
17 for (int i = 0; i<10; i++) {
18 //[self insertData];
19 }
20
21
22 [self findData];
23
24 // 关闭数据库
25 sqlite3_close(_db);
26 }
27
28 #pragma mark 查询数据
29 - (void)findData {
30 char *sql = "select id,name,age from t_person;";
31
32 sqlite3_stmt *stmt;
33
34 // sqlite3_prepare_v2做一些插入数据的准备
35 // 主要是检查SQL语句的语法问题
36 int result = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);
37 // 说明语句没有语法问题
38 if (result == SQLITE_OK) {
39
40 // 如果返回值是ROW,代表读取到一行数据
41 while (sqlite3_step(stmt) == SQLITE_ROW) {
42 // 列号从0开始
43 int ID = sqlite3_column_int(stmt, 0);
44
45 char *name = (char *)sqlite3_column_text(stmt, 1);
46
47 int age = sqlite3_column_int(stmt, 2);
48
49 NSLog(@"id=%i,name=%s,age=%i", ID, name, age);
50 }
51
52 } else {
53 NSLog(@"查询数据的SQL语句语法有问题");
54 }
55 }
56
57 #pragma mark 插入数据
58 - (void)insertData {
59 char *sql = "insert into t_person(name, age) values(?, ?);";
60
61 sqlite3_stmt *stmt;
62
63 // sqlite3_prepare_v2做一些插入数据的准备
64 // 主要是检查SQL语句的语法问题
65 int result = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);
66
67 // 说明语句没有语法问题
68 if (result == SQLITE_OK) {
69 // 第2个int类型的参数用来指定第几列,从1开始
70 // 绑定name字段的值
71 sqlite3_bind_text(stmt, 1, "mj", -1, NULL);
72
73 // 绑定age字段的值
74 sqlite3_bind_int(stmt, 2, 10);
75
76 // 执行sql语句
77 if (sqlite3_step(stmt) != SQLITE_DONE) {
78 NSLog(@"插入数据失败!");
79 } else {
80 NSLog(@"插入数据成功!");
81 }
82 } else {
83 NSLog(@"插入数据的SQL语句语法有问题");
84 }
85 }
86
87 #pragma mark 打开数据库
88 - (void)openDB {
89 // 数据库文件路径
90 NSString *filename = [@"sqlite.db" documentsAppend];
91
92 // 如果数据库不存在,就会创建一个
93 int result = sqlite3_open([filename UTF8String], &_db);
94 if (result == SQLITE_OK) {
95 NSLog(@"打开数据库成功!");
96 }
97 }
98
99 #pragma mark 创建表
100 - (void)createTables {
101 char *sql = "create table if not exists t_person(id integer primary key autoincrement, name text, age integer);";
102
103 char *error;
104 // sqlite3_exec能执行一切SQL语句
105 // insert into t_person(name, age) values('mj', 10);
106 int result = sqlite3_exec(_db, sql, NULL, NULL, &error);
107
108 if (result != SQLITE_OK) {
109 NSLog(@"创表错误:%s", error);
110 }
111 }
112 @end