`
toyota2006
  • 浏览: 552358 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

iPhone/iPad SQLite3 简明 使用 实例

阅读更多
简单sqlite使用
sqlite是嵌入式的和轻量级的sql数据库。sqlite是由c实现的。广泛用于包括浏览器(支持html5的大部分浏览器,ie除外)、ios、android以及一些便携需求的小型web应用系统。

使用sqlite前的准备
使用sqlite是很多做ios开发中第一次面对c的情况,包括我。因为sqlite是c写的,objc可以直接使用c代码。在sqlite前,一般都会使用cocoa touch框架,都是基于objc的。

首先,需要在对应文件的头文件中加入:

引用
#import "/usr/include/sqlite3.h"


并在Frameworks中加入所需的库,否则会报错:

引用
Undefined symbols:
  "_sqlite3_open", referenced from:




加入库的方法是:






选择sqlite库:





选择完的效果:





然后,应该有个成员变量,比如我的代码:

引用
@interface DetailViewController : UIViewController <UIPopoverControllerDelegate, UISplitViewControllerDelegate> {
    UIPopoverController *popoverController;
    UIToolbar *toolbar;
    id detailItem;
    UILabel *detailDescriptionLabel;
    sqlite3 *database;

打开数据库
sqlite数据库是文件数据库,是保存在文件系统中的。因此需要知道文件保存到哪里,可参见iOS中对文件的操作。比如本文保存到Documents目录下。代码:

引用
NSArray *documentsPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory
                                                   , NSUserDomainMask
                                                   , YES);
NSString *databaseFilePath=[[documentsPaths objectAtIndex:0] stringByAppendingPathComponent:@"mydb"];

if (sqlite3_open([databaseFilePath UTF8String], &database)==SQLITE_OK) {
    NSLog(@"open sqlite db ok.");
}

通过ssh查看Documents目录,发现mydb文件已经创建。sqlite的策略是如果有该文件就打开,如果没有就创建文件,也就是创建数据库。

这里要注意,使用的是c语法,sqlite3_open传入的是database的地址。

关闭数据库
数据库使用完毕后,要关闭,比如退出应用的时候:

引用
- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
   sqlite3_close(database);
    self.popoverController = nil;
}


建表语句
数据库打开以后,如果没有表,建表:

引用
char *errorMsg;
const char *createSql="create table if not exists persons (id integer primary key autoincrement,name text)";

if (sqlite3_exec(database, createSql, NULL, NULL, &errorMsg)==SQLITE_OK) {
    NSLog(@"create ok.");
}

这里要特别注意errorMsg传的是地址,因为该函数要通过地址引用来写报错字符信息。

向表中插入记录
和建表语句类似:

引用
const char *insertSql="insert into persons (name) values(‘张三’)";
    if (sqlite3_exec(database, insertSql, NULL, NULL, &errorMsg)==SQLITE_OK) {
        NSLog(@"insert ok.");
    }

错误信息的处理
如果在多个地方使用errorMsg,那么每次使用完毕要清空一下字串,比如这样:

引用
if (sqlite3_exec(database, createSql, NULL, NULL, &errorMsg)==SQLITE_OK) {
    NSLog(@"create ok.");
}else {
    NSLog(@"error: %s",errorMsg);
    sqlite3_free(errorMsg);
}

查询结果集
结果集的查询,需要用到statement:

引用
const char *selectSql="select id,name from persons";
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, selectSql, -1, &statement, nil)==SQLITE_OK) {
    NSLog(@"select ok.");
}

while (sqlite3_step(statement)==SQLITE_ROW) {
    int _id=sqlite3_column_int(statement, 0);
    char *name=(char *)sqlite3_column_text(statement, 1);
    NSLog(@"row>>id %i, name %s",_id,name);
}

sqlite3_finalize(statement);

不过这里有个问题,看看打印的日志:





乱码。因为直接用的char类型来做的。

解决办法是,用nsstring替代char:

引用
while (sqlite3_step(statement)==SQLITE_ROW) {
    int _id=sqlite3_column_int(statement, 0);
    NSString *name=[[NSString alloc] initWithCString:(char *)sqlite3_column_text(statement, 1) encoding:NSUTF8StringEncoding];
    NSLog(@"row>>id %i, name %@",_id,name);
}



char生成nsstring的时候做一次显式的编码。问题解决:





这说明:

写入数据库,用char的方式没有问题,写入数据库的编码是对的;
从库中取出,可能默认使用ascii解码,造成显示乱码。
使用sqlite c api,要经常参考官方函数文档:http://www.sqlite.org/c3ref/funclist.html

转自:http://marshal.easymorse.com/archives/3349
  • 大小: 59.4 KB
  • 大小: 17.8 KB
  • 大小: 11.1 KB
  • 大小: 44.8 KB
  • 大小: 62.4 KB
分享到:
评论

相关推荐

    @journeyapps/sqlcipher sqlite3加密

    标题 "@journeyapps/sqlcipher sqlite3加密" 涉及的是SQLCipher与SQLite3数据库的加密技术。SQLCipher是一款开源的、基于SQLite3的数据库加密解决方案,它为SQLite数据库提供了透明的数据加密功能,确保在存储和处理...

    sqlite3.exe

    9. 命令行选项:SQLite3.exe有多种命令行选项,例如,使用`.help`命令可以查看所有可用的命令,`.dump`用于导出数据库的SQL脚本,`.import`则可将数据从文本文件导入到表中。 10. 开发者友好:SQLite3.exe对于...

    Iphone中的SQLite 可运行的实例

    "Iphone中的SQLite 可运行的实例"是一个很好的起点,帮助开发者理解如何在iPhone应用程序中集成和操作SQLite数据库。这个实例提供了完整的代码和步骤,使得初学者能够快速上手。 SQLite在iOS中的应用主要涉及以下几...

    sqlite3使用实例代码

    主要是个人写的一个sqlite3 c接口的数据库操作demo,基本满足平时的使用要求。

    SQLite3 使用实例

    在这个"SQLite3 使用实例"中,我们将探讨三个基本的使用场景,帮助你理解如何在实际开发中应用 SQLite3。 1. **创建数据库和表** 在第一个实例中,你可能会看到如何创建一个新的 SQLite3 数据库以及定义表的结构。...

    sqlite3应用实例

    总结来说,这个“sqlite3应用实例”涵盖了SQLite3在Linux下的基本使用,包括安装、数据库的创建与操作、表的创建与管理,以及数据的增删查改。通过学习和实践这些内容,开发者可以有效地利用SQLite3进行小型项目的...

    iphone SQLite3进行数据持久化实例

    本实例将聚焦于如何在iPhone应用中使用SQLite3进行数据持久化操作。 SQLite3是一个嵌入式的SQL数据库引擎,它不需要独立的服务进程,可以直接集成到应用程序中。与Core Data相比,SQLite3提供了更直接的SQL语句操作...

    【Dealing with Data, User Defaults, SQLite, Web Services】[PDF] [iPhone/iPad/iOS]

    标题与描述中提到的知识点主要围绕在iOS应用开发中如何处理数据、用户默认设置(User Defaults)、SQLite数据库以及网络服务(Web Services)。以下是对这些关键概念的深入解析: ### 处理iOS应用中的数据 在iOS应用...

    sqlite3文件(sqlite3.dll,sqlite3.h,sqlite3.lib)

    标题提到的"sqlite3文件"主要包括三个关键组成部分:`sqlite3.dll`、`sqlite3.h`和`sqlite3.lib`,它们在开发和运行使用SQLite3的应用程序时起着至关重要的作用。 1. `sqlite3.dll`: 这是一个动态链接库文件,通常...

    _sqlite3.cpython-38-x86_64-linux-gnu.rar

    python3.8在import sqlite3时报错误:ImportError: No module named '_sqlite3'。 将该文件解压后,放到python3.8目录下的lib-dynload目录下。 比如我的服务器路径:/usr/local/bin/python3/lib/python3.8/lib-...

    c/c++ sqlite3示例

    c++的sqlite3接口.如果是c语言的话把函数参数传引用的地方的引用去掉即可,返回时返回指针就OK了.在linux环境下调试OK.里面有个示例Makefile及相应的源码.Makefile要根据个人机器上的sqlite3的头文件及动态库的存放...

    iPhone中Sqlite的使用

    在iOS开发中,SQLite是一个广泛使用的轻量级关系型数据库,尤其在iPhone应用程序中,它提供了数据持久化存储的能力。SQLite3.0是SQLite的其中一个版本,它支持多种数据库操作,如创建表、插入数据、查询数据等。下面...

    C/C++ SQLite3支持,包含说明文档

    1. **API接口**:SQLite3的C API提供了许多函数,如`sqlite3_open()`用于打开数据库,`sqlite3_exec()`用于执行SQL命令,`sqlite3_prepare_v2()`和`sqlite3_step()`用于准备和执行预编译的SQL语句,以及`sqlite3_...

    sqlite3:not found 解决方法

    1. **ADB Shell不包含sqlite3**:默认的ADB shell可能没有提供sqlite3命令,需要通过ADB推送sqlite3二进制文件到设备上,然后才能使用。 2. **Android版本限制**:早期版本的Android可能对SQLite的API或功能有限制...

    sqlite3数据库压缩包资源

    一 sqlite3.11.1的PC版本的编译 0. 把源码包拷贝虚拟机目录(不要放到共享目录) 1. tar zxvf sqlite-autoconf-3110100.tar.gz 2. cd sqlite-autoconf-3110100/ 3、sudo ./configure --prefix=/usr/... sqlite3

    sqlite3编译实例

    # 在/home/sqlite/目录下执行 tar zxf sqlite-amalgamation-3.6.1.tar.gz ``` 3. **创建目录结构** ```bash # 创建编译目录 mkdir sqlite-3.6.1 # 创建安装目录 mkdir /home/sqlite-arm ``` 4. **配置...

    sqlite3 not found的解决办法

    在使用Linux或Unix类操作系统时,可能会遇到"sqlite3 not found"这样的错误提示,这通常意味着系统中没有安装SQLite3这个数据库引擎或者其路径没有被正确地添加到系统的PATH环境变量中。SQLite3是一个轻量级、开源的...

    Sqlite3使用实例

    在这个“Sqlite3使用实例”中,我们将探讨如何利用SQLite3进行基本的数据库操作,包括创建数据库、创建表、插入数据、查询数据、更新数据以及删除数据。这些实例特别适合初学者理解和掌握SQLite3的使用。 首先,...

    SQLite3资料C++

    SQLiteSpy_1.8.5 数据库查看UI程序 :查看SQLIte3 数据库的UI小程序 _SQLite权威指南.pdf SQLite学习手册_中文全本.pdf CppSQLite3U国外牛人的sqlite封装....sqlite3的x86_vc6_DLL工程.rar使用vc6.0编译dll的完整工程

Global site tag (gtag.js) - Google Analytics