本文转载至 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. one day php. alomost all;

    <? namespace Test; use \PhpProject\PhpApp as Other; $u=new Other("ns test"); echo $u-&g ...

  2. canvas之webgl的打开方式

    OK,一个完整的dome是从无到有的.这篇文章将记录我的webgl之旅.不定时更新. 首先,新建一个canvas元素. 然后获取到它. var e = document.ElementById('ca ...

  3. [leetcode] permutations 排列

    写了两个,一个是直接的递归实现: class Solution { public: void swap(vector<int> &num,int left,int right) { ...

  4. phpcms V9 广告模块中广告模板修改

    广告模块模板位置 \phpcms\modules\poster\install\templates\*.html 我的需求: 去掉边框控制代码,是否显示边框我将在页面模板中设置,因些需要删除模板中的以 ...

  5. LeetCode OJ-- Reverse Integer

    https://oj.leetcode.com/problems/reverse-integer/ 一个整数,给反过来,比如123输出321.注意12300的情况,应该输出321,还有-123,是-3 ...

  6. Group by 两表联查取另一表与之关联数据的总数

    使用group by 需要查询的字段 必须要放在group by 后面 SELECT U.UserLotterySn,count(W.Userlotterysn) as WinCount,U.Acti ...

  7. kd树的构造与搜索

    学习了两篇博客,存下来以免丢失. http://blog.csdn.net/losteng/article/details/50893739 https://leileiluoluo.com/post ...

  8. Win10下 tensorflow gpu版安装

    准备: 系统环境: windows10 + Anaconda3 + Pycharm (1)环境配置: 打开Anaconda Prompt,输入清华仓库镜像,这样更新会快一些: 输入: conda co ...

  9. 洛谷——P1187 3D模型

    P1187 3D模型 题目描述 一座城市建立在规则的n×m网格上,并且网格均由1×1正方形构成.在每个网格上都可以有一个建筑,建筑由若干个1×1×1的立方体搭建而成(也就是所有建筑的底部都在同一平面上 ...

  10. C# MD5加密(16进制)

    MD5加密(16进制) vs会提示引用 using System.Security.Cryptography; 代码如下: public static string MD5Encrypt32(stri ...