前言

  • 采用 SQLite 数据库来存储数据。SQLite 作为一中小型数据库,应用 iOS 中,跟前三种保存方式相比,相对比较复杂一些。

  • 注意:写入数据库,字符串可以采用 char 方式,而从数据库中取出 char 类型,当 char 类型有表示中文字符时,会出现乱码。这是因为数据库默认使用 ASCII 编码方式。所以要想正确从数据库中取出中文,需要用 NSString 来接收从数据库取出的字符串。

  • sqlite 的方法:

    	sqlite3 *db             数据库句柄,跟文件句柄很类似
    sqlite3_stmt *stmt 这个相当于 ODBC 的 Command 对象,用于保存编译好的 SQL 语句
    sqlite3_open() 打开数据库,没有数据库时创建。
    sqlite3_exec() 执行非查询的 sql 语句
    Sqlite3_step() 在调用 sqlite3_prepare 后,使用这个函数在记录集中移动。
    Sqlite3_close() 关闭数据库文件 还有一系列的函数,用于从记录集字段中获取数据,如: sqlite3_column_text() 取 text 类型的数据。
    sqlite3_column_blob() 取 blob 类型的数据
    sqlite3_column_int() 取 int 类型的数据

1、环境配置

  • 添加动态库

    • 在 TARGETS => Build Phases => Link Binary With Libraries => +(添加) => Add Other... => command + shit + g => 输入 /usr/lib 找到一下文件并添加:libsqlite3.0.dylib

    • 或者在 TARGETS -> Build Settings -> Linking -> Other Linker Flags 中添加 -l< 所需 dylib 的名称 >:-lsqlite3.0

    • 添加头文件:

      	#import "sqlite3.h"
  • 配置数据库路径

    	// 设置数据库文件路径
    NSString *databaseFilePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/mydb.sqlite"]; // 创建数据库句柄
    sqlite3 *db; char *error;

2、打开数据库

	// 打开数据库,数据库文件不存在时,自动创建文件

	if (sqlite3_open([databaseFilePath UTF8String], &db) == SQLITE_OK) {
NSLog(@"sqlite dadabase is opened.");
} else {
NSLog(@"sqlite dadabase open fail.");
}

3、创建数据表

	/*
sql 语句,专门用来操作数据库的语句。
create table if not exists 是固定的,如果表不存在就创建。
myTable() 表示一个表,myTable 是表名,小括号里是字段信息。
字段之间用逗号隔开,每一个字段的第一个单词是字段名,第二个单词是数据类型,primary key 代表主键,autoincrement 是自增。
*/ NSString *createSql = @"create table if not exists myTable(id integer primary key autoincrement, name text, age integer, address text)"; if (sqlite3_exec(db, [createSql UTF8String], NULL, NULL, &error) == SQLITE_OK) {
NSLog(@"create table is ok.");
} else {
NSLog(@"error: %s", error); // 每次使用完毕清空 error 字符串,提供给下一次使用
sqlite3_free(error);
}

4、插入记录

	NSString *insertSql = @"insert into myTable(name, age, address) values('小新', '8', '东城区')";

	if (sqlite3_exec(db, [insertSql UTF8String], NULL, NULL, &error) == SQLITE_OK) {
NSLog(@"insert operation is ok.");
} else {
NSLog(@"error: %s", error); // 每次使用完毕清空 error 字符串,提供给下一次使用
sqlite3_free(error);
}

5、修改记录

	NSString *updateSql = @"update myTable set name = '小白', age = '10', address = '西城区' where id = 2";

	if (sqlite3_exec(db, [updateSql UTF8String], NULL, NULL, &error) == SQLITE_OK) {
NSLog(@"update operation is ok.");
} else {
NSLog(@"error: %s", error); // 每次使用完毕清空 error 字符串,提供给下一次使用
sqlite3_free(error);
}

6、删除记录

	NSString *deleteSql = @"delete from myTable where id = 3";

	if (sqlite3_exec(db, [deleteSql UTF8String], NULL, NULL, &error) == SQLITE_OK) {
NSLog(@"delete operation is ok.");
} else {
NSLog(@"error: %s", error); // 每次使用完毕清空 error 字符串,提供给下一次使用
sqlite3_free(error);
}

7、查询记录

	sqlite3_stmt *statement;

	// @"select * from myTable"  查询所有 key 值内容
NSString *selectSql = @"select id, name, age, address from myTable"; if (sqlite3_prepare_v2(db, [selectSql UTF8String], -1, &statement, nil) == SQLITE_OK) { while(sqlite3_step(statement) == SQLITE_ROW) { // 查询 id 的值
int _id = sqlite3_column_int(statement, 0); // 查询 name 的值
NSString *name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)]; // 查询 age
int age = sqlite3_column_int(statement, 2); // 查询 name 的值
NSString *address = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 3)]; NSLog(@"id: %i, name: %@, age: %i, address: %@", _id, name, age, address);
}
} else {
NSLog(@"select operation is fail.");
} sqlite3_finalize(statement);

8、关闭数据库

	sqlite3_close(db);

iOS - OC SQLite 数据库存储的更多相关文章

  1. iOS - Swift SQLite 数据库存储

    前言 采用 SQLite 数据库来存储数据.SQLite 作为一中小型数据库,应用 iOS 中,跟前三种保存方式相比,相对比较复杂一些. 注意:写入数据库,字符串可以采用 char 方式,而从数据库中 ...

  2. <Android基础> (六) 数据存储 Part 3 SQLite数据库存储

    6.4 SQLite数据库存储 SQLite是一种轻量级的关系型数据库,运算速度快,占用资源少. 6.4.1 创建数据库 Android为了管理数据库,专门提供了SQLiteOpenHelper帮助类 ...

  3. Android学习之基础知识九 — 数据存储(持久化技术)之SQLite数据库存储

    前面一讲介绍了数据持久化技术的前两种:文件存储.SharedPreferences存储.下面介绍第三种技术:SQLite数据库存储 一.SQLite数据库存储 SQLite数据库是一款轻量级的关系型数 ...

  4. python实现用户登陆(sqlite数据库存储用户信息)

    python实现用户登陆(sqlite数据库存储用户信息) 目录 创建数据库 数据库管理 简单登陆 有些地方还未完善. 创建数据库 import sqlite3 #建一个数据库 def create_ ...

  5. 使用嵌入式关系型SQLite数据库存储数据

    除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据. 在Android平台上,集成了一个嵌入式关系型数据库—SQLite, 1.SQLite3支持 ...

  6. 4、Android-数据存储方案(SQLite数据库存储)

    4.4.SQLite数据库存储 这是Android内置的数据库 是一款轻量级的关系型数据库 运算速度非常快.占用资源少.通常只需要几百kb的内存就够了 因而特别适合在移动端设备上使用 SQLite不仅 ...

  7. Android中数据存储(三)——SQLite数据库存储数据

    当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢? 数据存储方式 Android 的数据存储有5种方式: 1. Share ...

  8. iOS - SQLite 数据库存储

    1.SQLite 数据库 SQLite 是一种轻型的嵌入式数据库,安卓和 iOS 开发使用的都是 SQLite 数据库.它占用资源非常低,在嵌入式设备中,可能需要几百 K 的内存数据就够了.他的处理速 ...

  9. 【转】iOS - SQLite 数据库存储

    本文目录 1.SQLite 数据库 2.iOS 自带 SQLite 的使用 3.fmdb 的使用 4.fmdb 多线程操作 5.其他 SQLite 的第三方封装库 回到顶部 1.SQLite 数据库 ...

随机推荐

  1. new和malloc的区别

    1.malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符 2.new出来的指针是直接带类型信息的,而malloc返回的都是void*指针. 3.new 建立的是一个 ...

  2. Overview of Flashback Technology

    Oracle Flashback Query : SELECT AS OFOracle Flashback Version Query :DBMS_FLASHBACK PackageOracle Fl ...

  3. 7、XML加强/Web开发/Tomcat

    1 XML加强 XML加强 1)Dom4j修改XML文档 写出xml文档: XMLWriter writer = new XMLWriter() writer.wrtite(doc); 增加: Doc ...

  4. CSS3 功能

    1.  CSS3在css2的基础上增加了很多功能,ie8以下的浏览器有可能不支持某些属性,增加了很多圆角.渐变.旋转.阴影等效果 2.  文本修饰 text-decoration 属性用来设置或删除文 ...

  5. Linux软件的安装与卸载

    configure作用:是源码安装软件时配置环境用的 他根据你的配置选项和你的系统情况生成makefile文件 为make 做准备 最常用的参数: ./configure --prefix 作用: 不 ...

  6. USB wifi调试笔记

    本文以realtek 8192CU WiFi模块为例,介绍USB wifi在Jelly Bean 4.1的调试笔记. 1.WIFI打不开现象概述 WiFi打不开是指您在UI的settings下选中Wi ...

  7. Spring框架bean的配置(2):SpEL:引用 Bean、属性和方法。。。

    将这些架包放入在工程目录下建立的lib文件夹里,并解压 commons-logging-1.1.1 spring-aop-4.0.0.RELEASE spring-beans-4.0.0.RELEAS ...

  8. ROADS

    ROADS Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11977 Accepted: 4429 Description N ...

  9. MessageFlood 分类: 串 2015-06-18 17:00 10人阅读 评论(0) 收藏

    MessageFlood TimeLimit: 1500ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Well,how do you feel about mobil ...

  10. IOS自定义仪表盘

      登录|注册     周海锋 的专栏 Objective-C/Cocos2d/Cocos2d-x/Php/JS       目录视图 摘要视图 订阅 2016软考项目经理实战班    学院周年礼-顶 ...