iOS - OC SQLite 数据库存储
前言
采用 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 数据库存储的更多相关文章
- iOS - Swift SQLite 数据库存储
前言 采用 SQLite 数据库来存储数据.SQLite 作为一中小型数据库,应用 iOS 中,跟前三种保存方式相比,相对比较复杂一些. 注意:写入数据库,字符串可以采用 char 方式,而从数据库中 ...
- <Android基础> (六) 数据存储 Part 3 SQLite数据库存储
6.4 SQLite数据库存储 SQLite是一种轻量级的关系型数据库,运算速度快,占用资源少. 6.4.1 创建数据库 Android为了管理数据库,专门提供了SQLiteOpenHelper帮助类 ...
- Android学习之基础知识九 — 数据存储(持久化技术)之SQLite数据库存储
前面一讲介绍了数据持久化技术的前两种:文件存储.SharedPreferences存储.下面介绍第三种技术:SQLite数据库存储 一.SQLite数据库存储 SQLite数据库是一款轻量级的关系型数 ...
- python实现用户登陆(sqlite数据库存储用户信息)
python实现用户登陆(sqlite数据库存储用户信息) 目录 创建数据库 数据库管理 简单登陆 有些地方还未完善. 创建数据库 import sqlite3 #建一个数据库 def create_ ...
- 使用嵌入式关系型SQLite数据库存储数据
除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据. 在Android平台上,集成了一个嵌入式关系型数据库—SQLite, 1.SQLite3支持 ...
- 4、Android-数据存储方案(SQLite数据库存储)
4.4.SQLite数据库存储 这是Android内置的数据库 是一款轻量级的关系型数据库 运算速度非常快.占用资源少.通常只需要几百kb的内存就够了 因而特别适合在移动端设备上使用 SQLite不仅 ...
- Android中数据存储(三)——SQLite数据库存储数据
当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢? 数据存储方式 Android 的数据存储有5种方式: 1. Share ...
- iOS - SQLite 数据库存储
1.SQLite 数据库 SQLite 是一种轻型的嵌入式数据库,安卓和 iOS 开发使用的都是 SQLite 数据库.它占用资源非常低,在嵌入式设备中,可能需要几百 K 的内存数据就够了.他的处理速 ...
- 【转】iOS - SQLite 数据库存储
本文目录 1.SQLite 数据库 2.iOS 自带 SQLite 的使用 3.fmdb 的使用 4.fmdb 多线程操作 5.其他 SQLite 的第三方封装库 回到顶部 1.SQLite 数据库 ...
随机推荐
- PHP编写的图片验证码类文件分享方法
适用于自定义的验证码类! <?php/* * To change this license header, choose License Headers in Project Propertie ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)
MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...
- sql中的小细节
1.SUM与COUNT的区别 SUM是对符合条件的记录的数值列求和 COUNT 是对查询中符合条件的结果(或记录)的个数 2 select name as 姓名,tel from...where.. ...
- php中的curl】php中curl的详细解说
本文我来给大家详细介绍下cURL的简单的使用方法,下文我将会给大家详细介绍cURL的高级应用, cURL可以使用URL的语法模拟浏览器来传输数据, FTP, FTPS, HTTP, HTTPS, GO ...
- aspnet excel导入导出SQLserver
http://my.csdn.net/libin690145955/code/detail/452 http://blog.csdn.net/ltoper/article/details/532980 ...
- android FragmentPagerAdapter getItem方法没有执行
转自 http://blog.csdn.net/getchance/article/details/40263505 在一个 Android 应用中,我使用 FragmentPagerAdapter ...
- Spring框架bean的配置(2):SpEL:引用 Bean、属性和方法。。。
将这些架包放入在工程目录下建立的lib文件夹里,并解压 commons-logging-1.1.1 spring-aop-4.0.0.RELEASE spring-beans-4.0.0.RELEAS ...
- 周赛-Expression 分类: 比赛 2015-08-02 09:35 3人阅读 评论(0) 收藏
A. Expression time limit per test1 second memory limit per test256 megabytes inputstandard input out ...
- 二叉搜索树的后序遍历路径(《剑指offer》面试题24)
题目:输入一个整数数组,判断该数组是不是二叉搜索树的后序遍历序列的结果,如果是,则返回true,如果不是则返回false.假设输入的数组的任意两个数字都互不相同. 分析:在后序遍历得到的序列中,最后一 ...
- apahce
基本的操作方法:本文假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况 apahce启动命令:推荐/usr/local/apache2/bin/apachectl ...