SQLite编码

•SQLite编码

•讲师:李明杰

•技术博客:http://www.cnblogs.com/mjios

•SQLite3

•在iOS中使用SQLite3,首先要添加库文件libsqlite3.dylib和导入主头文件

•创建、打开、关闭数据库

•创建或打开数据库

// path为:~/Documents/person.db

sqlite3 *db = NULL;

int result = sqlite3_open([path UTF8String], &db);

•代码解析:

usqlite3_open()将根据文件路径打开数据库,如果不存在,则会创建一个新的数据库。如果result等于常量SQLITE_OK,则表示成功打开数据库

usqlite3 *db:一个打开的数据库实例

u数据库文件的路径必须以C字符串(而非NSString)传入

•关闭数据库:sqlite3_close(db);

•执行不返回数据的SQL语句

•执行创表语句

char *errorMsg = NULL;  // 用来存储错误信息

char *sql = "create table if not exists t_person(id integer primary key autoincrement, name text, age integer);";

int result = sqlite3_exec(db, sql, NULL, NULL, &errorMsg);

•代码解析:

usqlite3_exec()可以执行任何SQL语句,比如创表、更新、插入和删除操作。但是一般不用它执行查询语句,因为它不会返回查询到的数据

usqlite3_exec()还可以执行的语句:

①开启事务:begin transaction;

②回滚事务:rollback;

③提交事务:commit;

•带占位符插入数据

char *sql = "insert into t_person(name, age) values(?, ?);";

sqlite3_stmt *stmt;

if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) == SQLITE_OK) {

sqlite3_bind_text(stmt, 1, "母鸡", -1, NULL);

sqlite3_bind_int(stmt, 2, 27);

}

if (sqlite3_step(stmt) != SQLITE_DONE) {

NSLog(@"插入数据错误");

}

sqlite3_finalize(stmt);

•代码解析:

usqlite3_prepare_v2()返回值等于SQLITE_OK,说明SQL语句已经准备成功,没有语法问题

•带占位符插入数据

usqlite3_bind_text():大部分绑定函数都只有3个参数

①第1个参数是sqlite3_stmt *类型

②第2个参数指占位符的位置,第一个占位符的位置是1,不是0

③第3个参数指占位符要绑定的值

④第4个参数指在第3个参数中所传递数据的长度,对于C字符串,可以传递-1代替字符串的长度

⑤第5个参数是一个可选的函数回调,一般用于在语句执行后完成内存清理工作

usqlite_step():执行SQL语句,返回SQLITE_DONE代表成功执行完毕

usqlite_finalize():销毁sqlite3_stmt *对象

•查询数据

char *sql = "select id,name,age from t_person;";

sqlite3_stmt *stmt;

if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) == SQLITE_OK) {

while (sqlite3_step(stmt) == SQLITE_ROW) {

int _id = sqlite3_column_int(stmt, 0);

char *_name = (char *)sqlite3_column_text(stmt, 1);

NSString *name = [NSString stringWithUTF8String:_name];

int _age = sqlite3_column_int(stmt, 2);

NSLog(@"id=%i, name=%@, age=%i", _id, name, _age);

}

}

sqlite3_finalize(stmt);

•代码解析

usqlite3_step()返回SQLITE_ROW代表遍历到一条新记录

usqlite3_column_*()用于获取每个字段对应的值,第2个参数是字段的索引,从0开始

时间: 2025-01-09 20:43:05

SQLite编码的相关文章

iOS开发数据库篇—SQLite常用的函数

iOS开发数据库篇—SQLite常用的函数 一.简单说明 1.打开数据库 int sqlite3_open( const char *filename,   // 数据库的文件路径 sqlite3 **ppDb          // 数据库实例 ); 2.执行任何SQL语句 int sqlite3_exec( sqlite3*,                                  // 一个打开的数据库实例 const char *sql,                    

SQLite简单介绍

一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1)归档:NSCodeing.NSKeyedArchiver (2)偏好设置:NSUserDefaults (3)Plist存储:writeToFile 提示:上述三种方法都有一个致命的缺点,那就是都无法存储大批量的数据,有性能的问题. 举例:使用归档 两个问题: (1)数据的存取都必须是完整的,要求写入的时候要一次性写入,读取的时候要一次性

iOS数据持久化—SQLite常用的函数

iOS开发数据库篇—SQLite常用的函数 一.简单说明 1.打开数据库 int sqlite3_open( const char *filename,   // 数据库的文件路径 sqlite3 **ppDb          // 数据库实例 ); 2.执行任何SQL语句 int sqlite3_exec( sqlite3*,                                  // 一个打开的数据库实例 const char *sql,                    

SQLite-iOS

前言 iOS中的数据存储方式 Plist(NSArray\NSDictionary) Preference(偏好设置\NSUserDefaults) http://www.jianshu.com/p/459c15cf6ce2 NSCoding(NSKeyedArchiver\NSkeyedUnarchiver) SQLite3 Core Data(C语言操作的基础上增添面向对象,重量级) 1. SQLite 什么是SQLite SQLite是一款轻型的嵌入式数据库 它占用资源非常的低,在嵌入式设

iOS开发针对SQL语句的封装

1.使用依赖关系 a.需要添加libsqlite3.tbd 静态库. b.需要添加第三方框架 FMBD.MJExtension. 2. SQL语句类封装名DataBaseSqlTool 类方法介绍: /** *  删除表 * *  @param tableName 数据表名称 * *  @return 删除表是否成功 */ + (BOOL)deleteTable:(NSString *)tableName; /** *  清除表 (清空表中的内容) * *  @param tableName 数

关于Androdi中SQLITE 3采用GBK编码存储,数据库中文乱码问题。

1.最近开发一个项目,用SQLite Expert Personal打开数据库如下图,title会产生乱码,问题. 2.由于SQL lite默认是存储UTF-8格式,后来更改数据库编码类型为ANSI,依据操作系统,本地ANSI为GB2312格式,查看发现编码格式正常. 3.用Android程序读取,采用以下方式,可以完整读取出中文字符. Product pr=new Product(); //解决中文乱码问题 byte[] val = cursor.getBlob(cursor.getColum

C++ sqlite数据库中文路径编码函数

char* UnicodeToUtf8(const wchar_t* unicode) { int len; len = WideCharToMultiByte(CP_UTF8, 0, unicode, -1, NULL, 0, NULL, NULL); char *szUtf8 = (char*)malloc(len + 1); memset(szUtf8, 0, len + 1); WideCharToMultiByte(CP_UTF8, 0, unicode, -1, szUtf8, le

SQLite 约束

约束是在表的数据列上强制执行的规则.这些是用来限制可以插入到表中的数据类型.这确保了数据库中数据的准确性和可靠性. 约束可以是列级或表级.列级约束仅适用于列,表级约束被应用到整个表. 以下是在 SQLite 中常用的约束. NOT NULL 约束:确保某列不能有 NULL 值. DEFAULT 约束:当某列没有指定值时,为该列提供默认值. UNIQUE 约束:确保某列中的所有值是不同的. PRIMARY Key 约束:唯一标识数据库表中的各行/记录. CHECK 约束:CHECK 约束确保某列中

SQLite 数据类型

SQLite 数据类型 参考: SQLite 数据类型 | 菜鸟教程http://www.runoob.com/sqlite/sqlite-data-types.html SQLite 数据类型是一个用来指定任何对象的数据类型的属性.SQLite 中的每一列,每个变量和表达式都有相关的数据类型. 您可以在创建表的同时使用这些数据类型.SQLite 使用一个更普遍的动态类型系统.在 SQLite 中,值的数据类型与值本身是相关的,而不是与它的容器相关. SQLite 存储类 每个存储在 SQLit