IOS 数据库管理系统(SQLite)

本文详细介绍如何在iOS应用中利用SQLite嵌入式数据库进行数据存储与管理,包括数据库的打开与关闭、表的创建、数据的增删改查等核心操作。

转自:http://www.2cto.com/kf/201411/354688.html

嵌入式数据库

SQLite嵌入式数据库优点

1.支持事件,不需要配置,不需要安装,不需要管理员

2.支持发部分SQL92

3.完整的数据库保存在磁盘上面一个文件,同一个数据库文件可以在不同机器上面使用,最大支持数据库到2T

4.整个系统少于3万行,少于250KB的内存占用

Linux系统级的SQLite技术实现框架libsqlite3.0.dylib


开始使用SQLite  

1.引入头文件

2.打开数据库

3.执行SQL命令

4.关闭数据库

一下代码展示整个数据库的 打开,关闭,增加,删除,查找,修改,

创建一个单例

?
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
# import <foundation foundation.h >
@class Student;
@interface DataBaseHandle : NSObject
//创建一个单例
+(DataBaseHandle *)shareDB;
 
//获取Documents路径
- (NSString *)documentsPath;
 
//打开数据库
- ( void )openDB;
 
//关闭数据库
- ( void )closeDB;
 
//创建表
- ( void )createTable;
 
//插入信息
- ( void )insertStudent:(Student *)stu;
 
//修改信息
- ( void )updateMessage;
 
//删除信息
- ( void )deleteMessage;
 
//查找全部
- ( void )selectAllStudent;
 
//条件查找
- ( void )selectWithSex:(NSString *)sex;
 
 
@end


?
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
# import "DataBaseHandle.h"
# import <sqlite3.h>
# import "Student.h"

//全局单利对象
static DataBaseHandle *shareModle = nil;

@implementation DataBaseHandle

#pragma mark 实现单利
+ (DataBaseHandle *)shareDB
{
     if (nil == shareModle)
     {
         shareModle = [[DataBaseHandle alloc] init];
     }
     return shareModle;
}
 

#pragma  mark 获取Documents路径
- (NSString *)documentsPath
{
     NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[ 0 ];
     return documentPath;
}
 
//在操作数据之前引入框架(sql...3.0)
//声明一个数据库的对象
static sqlite3 *db = nil;

#pragma mark 打开数据库
- ( void )openDB
{
     //判断数据库是不是为空
     if (nil == db)
     {
         //与documents路径拼接数据库存放路径(获得存放路径)
         NSString *dbPath = [[self documentsPath] stringByAppendingString:@ "/Student.sqlite" ];
         //根据路径打开数据库,如该路径下没有数据库,就自动创建一个数据库
         //打开数据库(c语言中的语法)
         int result = sqlite3_open(dbPath.UTF8String, &db);
         //判断是否打开数据库成功
         if (result == SQLITE_OK)
         {
             NSLog(@ "数据库打开成功" );
         }
         else
         {
             NSLog(@ "数据库打开失败" );
         }
     }
}
 
 
#pragma mark 关闭数据库
 
- ( void )closeDB
{
     int result = sqlite3_close(db);
     if (result == SQLITE_OK)
     {
         //如果关闭成功,置为nill
         db = nil;
         NSLog(@ "数据库关闭成功" );
     }
     else
     {
         NSLog(@ "数据库关闭失败" );
     }
}
 
 
#pragma mark 创建表
- ( void )createTable
{
     //要创建表,就要使用SQL语句.
     //SQL语句在这是以字符串的形式存在的
     NSString *createString = @ "CREATE  TABLE  IF NOT EXISTS student (sid INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , sname TEXT, ssex TEXT, sage TEXT)" ;
     //执行SQL语句
    int result = sqlite3_exec(db, createString.UTF8String, NULL, NULL, NULL);
     
     if (result == SQLITE_OK)
     {
         NSLog(@ "创建表成功" );
     }
     else
     {
         NSLog(@ "创建失败" );
     }
     
}
 
 
#pragma mark 插入信息
- ( void )insertStudent:(Student *)stu
{
     //准备插入语句
     NSString *insertString = [NSString stringWithFormat:@ "INSERT INTO student (sname,ssex,sage) VALUES ('%@','%@','%@')" ,stu.name,stu.sex,stu.age];
     //执行语句
     int result = sqlite3_exec(db, insertString.UTF8String, NULL, NULL, NULL);
     if (result == SQLITE_OK)
     {
         NSLog(@ "插入成功" );
     }
     else
     {
         NSLog(@ "插入失败" );
     }
     
     
     
}
 
#pragma mark 修改数据
- ( void )updateMessage
{
     //准备修改语句
     NSString *undataString = @ "UPDATE student SET ssex = '女' ,sname = '小梦' WHERE  sid = 10" ;
     int result = sqlite3_exec(db, undataString.UTF8String, NULL, NULL, NULL);
     if (result == SQLITE_OK)
     {
         NSLog(@ "修改成功" );
     }
     else
     {
         NSLog(@ "修改失败" );
     }
     
 
}
 
#pragma  mark 删除数据
- ( void )deleteMessage
{
     //准备删除语句
     NSString *deleteString = @ "DELETE  FROM student WHERE sid = 1" ;
     int result = sqlite3_exec(db, deleteString.UTF8String, NULL, NULL, NULL);
     if (result == SQLITE_OK)
     {
         NSLog(@ "delete OK" );
     }
     else
     {
         NSLog(@ "delete _NO" );
     }
     
}
 
#pragma mark 查找全部
- ( void )selectAllStudent
{
     //准备查找语句
     NSString *selectAll = @ "SELECT *FROM student" ;
     //创建伴随指针
     sqlite3_stmt *stmt = nil;
     
     //预备执行
     int result = sqlite3_prepare(db, selectAll.UTF8String, - 1 , &stmt, NULL);
     if (result == SQLITE_OK)
     {
         //在没有查找完成之前一直循环执行
         while (sqlite3_step(stmt) == SQLITE_ROW)
         {
             //取出sid(第0列)
             NSInteger sid = sqlite3_column_int(stmt, 0 );
             //取出sname(第1列)
             NSString *sname = [NSString stringWithUTF8String:( const char *)sqlite3_column_text(stmt, 1 )];
             //取出ssex(第2列)
             NSString *ssex = [NSString stringWithUTF8String:( const char *)sqlite3_column_text(stmt, 2 )];
             //取出sage(第3列)
             NSString *sage = [NSString stringWithUTF8String:( const char *)sqlite3_column_text(stmt, 3 )];
             NSLog(@ "sid:%d sname:%@ ssex:%@ sage:%@" ,sid,sname,ssex,sage);
     
             
         }
         sqlite3_finalize(stmt);
     }
     else
     {
         //如果查找失败,结束伴随指针
         sqlite3_finalize(stmt);
         NSLog(@ "查找失败" );
     }
     
}
#pragma mark 条件查找
- ( void )selectWithSex:(NSString *)sex
{
     //准备查找语句
     NSString *selecstString = @ "SELECT * FROM student WHERE ssex = ?" ;
     //创建伴随指针
     sqlite3_stmt *stmt = nil;
     //预执行
      int result = sqlite3_prepare(db, selecstString.UTF8String, - 1 , &stmt, NULL);
     
 
     if (result == SQLITE_OK)
     {
         //绑定?的值
         //"1"代表第一个问号"?"和哪个参数绑定
         sqlite3_bind_text(stmt, 1 , sex.UTF8String, - 1 , NULL);
         while (sqlite3_step(stmt) == SQLITE_ROW)
         {
 
             NSInteger sid = sqlite3_column_int(stmt, 0 );
             NSString *sname = [NSString stringWithUTF8String:( const char *)sqlite3_column_text(stmt, 1 )];
             NSString *ssex = [NSString stringWithUTF8String:( const char *)sqlite3_column_text(stmt, 2 )];
             NSString *sage = [NSString stringWithUTF8String:( const char *)sqlite3_column_text(stmt, 3 )];
             NSLog(@ "sid: %d sname: %@ ssex: %@ sage: %@" ,sid,sname,ssex,sage);
             
         }
         
         
     }
     else
     {
         //关闭指针
         sqlite3_finalize(stmt);
         NSLog(@ "查询失败" );
     }
}
 
 
 
 
@end


创建一个Student类

?
1
2
3
4
5
6
7
# import <foundation foundation.h >
 
@interface Student : NSObject
@property (nonatomic,strong)NSString *name;
@property (nonatomic,strong)NSString *age;
@property (nonatomic,strong)NSString *sex;
@end

在 ViewController.m中 ViewDidLoad 调用方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
     //打印路径
     NSLog(@ "%@" ,[[DataBaseHandle shareDB] documentsPath]);
     //打开数据库
     [[DataBaseHandle shareDB] openDB];
     //创建表
     [[DataBaseHandle shareDB] createTable];
     
     //插入信息
//    Student *stu = [[Student alloc] init];
//    stu.name = @"小露";
//    stu.age = @"29";
//    stu.sex = @"女";
//    [[DataBaseHandle shareDB] insertStudent:stu];
     //修改
//    [[DataBaseHandle shareDB] updateMessage];
     //删除
//    [[DataBaseHandle shareDB] deleteMessage];
     //查找全部信息
//    [[DataBaseHandle shareDB] selectAllStudent];
     //根据条件查找信息
     [[DataBaseHandle shareDB] selectWithSex:@ "女" ];


渭河流域位于中国黄河中游地区,是黄河的重要一级支流流域,地理范围主要涵盖陕西省中部、甘肃东部和宁夏部分地区。该流域自西向东延伸,总长约818公里,流域面积广阔,人口密集,是我国重要的农业与工业带,同时也是西北地区经济、文化与生态发展的核心区域之一。渭河流域水系发育完善,除干流外,还包括泾河、洛河、沣河、滈河等多条支流,构成了完整的河网体系,对黄河流域的水资源调配与生态安全具有重要意义。 本数据集提供了渭河流域矢量边界及河流分布的标准化shp文件,包含以下文件: (1)可编辑MXD文件:可直接在 ArcGIS 中打开,用户可进行二次编辑、专题制图及空间分析,方便科研、教学与管理应用。 (2)标准SHP文件:包含渭河流域边界矢量数据以及干流与主要支流的矢量化河流线条,属性表中附带河流名称、流域隶属等信息,便于查询与叠加分析。 (3)标准成图TIF文件:输出高清、规范的地图成果,能够直观展示渭河流域整体边界与内部河流分布格局,可用于汇报、展示与出版。 本资源可广泛应用于流域水资源管理、生态环境保护、土地利用研究、洪涝灾害评估等领域,同时也能为流域综合治理、生态修复规划、水文模拟与地理建模提供基础支撑。通过与其他数据(如DEM、土地覆盖、气象数据)叠加使用,还能开展更加深入的多源数据分析,为黄河流域高质量发展与区域生态安全提供科学依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值