本文转载至 http://www.cnblogs.com/cokecoffe/archive/2012/05/31/2537105.html

看着国外网站的教程,写了一个小例子,一个联系人的程序,包括 (姓名、地址、电话)三项内容,通过两个按钮,可以将信息保存或者查询数据库已有的信息。

UI就不说了,比较简单。贴一下关键代码,具体的话还是去看源代码(正想办法传,我这git出点问题)。

git:https://github.com/cokecoffe/ios-demo/tree/master/SQLite%E7%9A%84%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8

  1 /*根据路径创建数据库并创建一个表contact(id nametext addresstext phonetext)*/
2
3 - (void)viewDidLoad
4 {
5 [super viewDidLoad];
6 // Do any additional setup after loading the view, typically from a nib.
7
8 NSString *docsDir;
9 NSArray *dirPaths;
10
11 // Get the documents directory
12 dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
13
14 docsDir = [dirPaths objectAtIndex:0];
15
16 // Build the path to the database file
17 databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"contacts.db"]];
18
19 NSFileManager *filemgr = [NSFileManager defaultManager];
20
21 if ([filemgr fileExistsAtPath:databasePath] == NO)
22 {
23 const char *dbpath = [databasePath UTF8String];
24 if (sqlite3_open(dbpath, &contactDB)==SQLITE_OK)
25 {
26 char *errMsg;
27 const char *sql_stmt = "CREATE TABLE IF NOT EXISTS CONTACTS(ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, ADDRESS TEXT,PHONE TEXT)";
28 if (sqlite3_exec(contactDB, sql_stmt, NULL, NULL, &errMsg)!=SQLITE_OK)
29 {
30 status.text = @"创建表失败\n";
31 }
32 }
33 else
34 {
35 status.text = @"创建/打开数据库失败";
36 }
37 }
38
39 }
40
41 /*将数据保存只数据库,当按下保存按钮的时候*/
42
43 - (IBAction)SaveToDataBase:(id)sender
44 {
45 sqlite3_stmt *statement;
46
47 const char *dbpath = [databasePath UTF8String];
48
49 if (sqlite3_open(dbpath, &contactDB)==SQLITE_OK) {
50 NSString *insertSQL = [NSString stringWithFormat:@"INSERT INTO CONTACTS (name,address,phone) VALUES(\"%@\",\"%@\",\"%@\")",name.text,address.text,phone.text];
51 const char *insert_stmt = [insertSQL UTF8String];
52 sqlite3_prepare_v2(contactDB, insert_stmt, -1, &statement, NULL);
53 if (sqlite3_step(statement)==SQLITE_DONE) {
54 status.text = @"已存储到数据库";
55 name.text = @"";
56 address.text = @"";
57 phone.text = @"";
58 }
59 else
60 {
61 status.text = @"保存失败";
62 }
63 sqlite3_finalize(statement);
64 sqlite3_close(contactDB);
65 }
66 }
67
68 /*根据输入的姓名来查询数据*/
69 - (IBAction)SearchFromDataBase:(id)sender
70 {
71 const char *dbpath = [databasePath UTF8String];
72 sqlite3_stmt *statement;
73
74 if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK)
75 {
76 NSString *querySQL = [NSString stringWithFormat:@"SELECT address,phone from contacts where name=\"%@\"",name.text];
77 const char *query_stmt = [querySQL UTF8String];
78 if (sqlite3_prepare_v2(contactDB, query_stmt, -1, &statement, NULL) == SQLITE_OK)
79 {
80 if (sqlite3_step(statement) == SQLITE_ROW)
81 {
82 NSString *addressField = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 0)];
83 address.text = addressField;
84
85 NSString *phoneField = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 1 )];
86 phone.text = phoneField;
87
88 status.text = @"已查到结果";
89 [addressField release];
90 [phoneField release];
91 }
92 else {
93 status.text = @"未查到结果";
94 address.text = @"";
95 phone.text = @"";
96 }
97 sqlite3_finalize(statement);
98 }
99
100 sqlite3_close(contactDB);
101 }
102 }

IOS下SQLite的简单使用的更多相关文章

  1. Win7下SQLite的简单使用

    前言 SQLite 是一个软件库,实现了自给自足的.无服务器的.零配置的.事务性的 SQL 数据库引擎.SQLite 是在世界上最广泛部署的 SQL 数据库引擎.SQLite 源代码不受版权限制. 简 ...

  2. ios下最简单的正则,RegexKitLite

    ios下最简单的正则,RegexKitLite 1.去RegexKitLite下载类库,解压出来会有一个例子包及2个文件,其实用到的就这2个文件,添加到工程中.备用地址:http://www.coco ...

  3. Visual Studio下SQLite数据库开发环境设置

    由于我们介绍的内容都是基于微软的Visual Studio下开发的Win32平台,所以下边我们介绍Visual Studio下SQLite数据库开发环境设置.具体而言我们有两种方式可以在Visual ...

  4. opencv直线检测在c#、Android和ios下的实现方法

    opencv直线检测在c#.Android和ios下的实现方法 本文为作者原创,未经允许,不得转载 :原文由作者发表在博客园:http://www.cnblogs.com/panxiaochun/p/ ...

  5. iframe在ios下无故扩大的问题探究

    移动端页面内嵌了个 iframe,在 ios 下打开却发现页面怪异.比如 demo.代码如下: <!DOCTYPE html> <html lang="zh-CN" ...

  6. iOS下的 Fixed + Input 调用键盘的时候fixed无效问题解决方案

    做touchweb开发的时候,做头疼的是,电脑上面时候好的,有些手机上面也是好的,个别手机和浏览器出现问题,对于这些,只能慢慢调试,找问题. 今天说一下比较老的IOS的问题,那就是"iOS下 ...

  7. iOS开发UI篇—简单介绍静态单元格的使用

    iOS开发UI篇—简单介绍静态单元格的使用 一.实现效果与说明 说明:观察上面的展示效果,可以发现整个界面是由一个tableview来展示的,上面的数据都是固定的,且几乎不会改变. 要完成上面的效果, ...

  8. iOS下使用SHA1WithRSA算法加签源码

    首先了解一下几个相关概念,以方便后面遇到的问题的解决: RSA算法:1977年由Ron Rivest.Adi Shamirh和LenAdleman发明的,RSA就是取自他们三个人的名字.算法基于一个数 ...

  9. 解决ios下的微信打开的页面背景音乐无法自动播放

    后面的项目发现,还有两个坑,需要注意下: ·本文的解决方案的核心是利用了 微信/易信 在ready的时候会有个 WeixinJSBridgeReady/YixinJSBridgeReady事件,通过监 ...

随机推荐

  1. 网络流24题-最长k可重线段集问题

    最长k可重线段集问题 时空限制1000ms / 128MB 题目描述 给定平面 x−O−y 上 n 个开线段组成的集合 I,和一个正整数 k .试设计一个算法,从开线段集合 I 中选取出开线段集合 S ...

  2. TroubleShoot: Excel Services Fix - "The workbook cannot be opened".

    1. 问题描述: 在SharePoint 2013 文档库中打开Excel 文件提示"The workbook cannot be opened" 错误提示框,文档不能正常显示. ...

  3. SpringCloud-分布式配置中心【入门介绍】

    案例代码:https://github.com/q279583842q/springcloud-e-book 一. 为什么需要使用配置中心 1 服务配置的现状 2 常用的配置管理解决方案的缺点 3 为 ...

  4. 古代猪文 BZOJ 1951

    古代猪文 [问题描述] “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...

  5. Beyond compare vs kdiff3

    這裡使用的 kdiff3 版本是 0.9.98   基於以下 三點,最終選擇了 beyond compare   1. kdiff3 不能刪檔案,     以下為例,不能刪1   2. kdiff3 ...

  6. CCCC L2-024 部落【并查集】

    https://www.patest.cn/contests/gplt/L2-024 首先在一行中输出这个社区的总人数.以及互不相交的部落的个数.随后对每一次查询,如果他们属于同一个部落,则在一行中输 ...

  7. Codeforces 635D Factory Repairs【树状数组】

    又是看了很久的题目... 题目链接: http://codeforces.com/contest/635/problem/D 题意: 一家工厂生产维修之前每天生产b个,维修了k天之后每天生产a个,维修 ...

  8. BZOJ 1044 木棍分割(二分答案 + DP优化)

    题目链接  木棍分割 1044: [HAOI2008]木棍分割 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3830  Solved: 1453[S ...

  9. Endless Pallet(min-max容斥)

    地址:传送门 分析: 设$x_i$表示第i个点被染成黑色的时间,所求即为$E(max \left \{x_i  \right \})$ 因为$E(X)=\sum_{k=1}^{\infty}i \ti ...

  10. HttpClient的Post请求数据

    最近在项目中需要添加Post请求数据,以前的Get请求是使用JDK自带的URLConnection.在项目组人员的推荐下,开始使用HttpClient. HttpClient简介: HttpClien ...