热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOSsqlite数据库使用

关于sqlite是一个轻量的、跨平台的、开源的数据库引擎。他在读写效率,操作便捷程度,内存消耗上具有很大的优越性,所以很受移动开发者的喜爱。当然,sqlite也因其力求简单高效

  关于sqlite是一个轻量的、跨平台的、开源的数据库引擎。他在读写效率,操作便捷程度,内存消耗上具有很大的优越性,所以很受移动开发者的喜爱。当然,sqlite 也因其力求简单高效,也就限制了它对并发,海量数据的处理。这篇博客主要讲的是iOS开发中sqlite和开源库FMDB的使用。

  demo 地址 TP

  •   常使用的方法介绍
  1.   首先打开数据库

int result = sqlite3_open_v2(fileName.UTF8String, &db, SQLITE_IOERR_READ|SQLITE_IOERR_WRITE|SQLITE_OPEN_CREATE, NULL);
if (result == SQLITE_OK) {
NSLog(
@"open true");
}

  2.  创建表

//创建表
const char *sqlCreate = "CREATE TABLE IF NOT EXISTS t_demo (id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL);"; char *errmsg = NULL;
result
= sqlite3_exec(db, sqlCreate, NULL, NULL, &errmsg);
if (result == SQLITE_OK) {
NSLog(
@"create true");
}

  3.  执行sql语句

//执行sql语句 //1.插入
NSString *sqlInsert = [NSString stringWithFormat:@"INSERT INTO t_demo (name,age) VALUES('%@','%d');",@"one",19];
sqlite3_exec(db, sqlInsert.UTF8String, NULL, NULL,
&errmsg);
sqlite3_exec(db, sqlInsert.UTF8String, NULL, NULL,
&errmsg);
sqlite3_exec(db, sqlInsert.UTF8String, NULL, NULL,
&errmsg);
if (errmsg) {
NSLog(
@"insert false");
}
// 2.查询
NSString *sqlQuery = [NSString stringWithFormat:@"SELECT id,name,age FROM t_demo;"];
sqlite3_stmt
*stmt = NULL;
//准备执行语句
if (sqlite3_prepare_v2(db, sqlQuery.UTF8String, -1, &stmt, NULL) == SQLITE_OK) {
//分步执行
while (sqlite3_step(stmt) == SQLITE_ROW) {
int ID = sqlite3_column_int(stmt, 0);
const unsigned char *name = sqlite3_column_text(stmt, 1);
int age = sqlite3_column_int(stmt, 2);

NSLog(
@"%d***%s******%d",ID,name,age);
}
}
//释放
sqlite3_free(stmt);

  •  常使用的方法介绍
  1. 打开数据库

sqlite3_open_v2(
const char *filename, /* 数据库名字 */
sqlite3
**ppDb, /* 数据库实例 */
int flags, /* Flags */
const char *zVfs /* Name of VFS module to use */
);

  2.执行sql语句

sqlite3_exec(
sqlite3
*, /* 数据库实例*/
const char *sql, /* sql语句 */
int (*callback)(void*,int,char**,char**), /* Callback function */
void *, /* 1st argument to callback */
char **errmsg /* Error msg written here */
);

  3.检查sql语句语法

sqlite3_prepare_v2(
sqlite3
*db, /* 数据库实例 */
const char *zSql, /* sql语句 */
int nByte, /* Maximum length of zSql in bytes. */
sqlite3_stmt
**ppStmt, /* OUT: Statement handle */
const char **pzTail /* OUT: Pointer to unused portion of zSql */
);

  4.查询一行数据,如果查询到一行数据,就会返回SQLITE_ROW

sqlite3_step(sqlite3_stmt*);

  5.利用stmt获得某一列的值

double sqlite3_column_double(sqlite3_stmt*, int iCol); // 浮点数据
int sqlite3_column_int(sqlite3_stmt*, int iCol); // 整型数据
sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); // 长整型数据
const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); // 二进制文本数据
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); // 字符串数据

 FMDB 是对sqlite的封装。源码地址 https://github.com/ccgus/fmdb,操作是oc方法,这对不熟悉或者不想操作c语言方法的同学来说是一个解脱。

首先导入sqlite系统库,引入头文件#import “FMDB.h”

NSString *docDic = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString
*fileName = [docDic stringByAppendingPathComponent:@"fmdb.db"];
//创建数据库,路径为空的话,在内存中创建数据库
fmdb = [FMDatabase databaseWithPath:fileName]; [fmdb open];
//执行sql语句,增、删、改都是executeUpdate方法
NSString *sqlCreate =@"CREATE TABLE IF NOT EXISTS t_demo (id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL);";
BOOL res
= [fmdb executeUpdate:sqlCreate];
NSString
*sqlInsert = [NSString stringWithFormat:@"INSERT INTO t_demo (name,age) VALUES('%@','%d');",@"one",19];
res
= [fmdb executeUpdate:sqlInsert];
if (!res) {
NSLog(
@"error when creating db table");
}
else {
NSLog(
@"success to creating db table");
}
//执行查询
NSString *sqlQuery = [NSString stringWithFormat:@"SELECT id,name,age FROM t_demo;"]; FMResultSet * rs = [fmdb executeQuery:sqlQuery];
while ([rs next]) {
int Id = [rs intForColumn:@"id"];
NSString
* name = [rs stringForColumn:@"name"];
NSString
* age = [rs stringForColumn:@"age"];
NSLog(
@"id = %d, name = %@, age = %@ ", Id, name, age);
}

 


推荐阅读
  • Pikachu平台SQL注入漏洞详解
    本文详细介绍了SQL注入漏洞的基本原理、攻击流程、不同类型注入点的识别与利用方法,以及基于union联合查询、报错信息、布尔盲注、时间盲注等多种技术手段的信息获取方式。同时,探讨了如何通过SQL注入获取操作系统权限,以及HTTP Header注入和宽字节注入等高级技巧。最后,提供了使用SQLMap自动化工具进行漏洞测试的方法和常见的SQL注入防御措施。 ... [详细]
  • Python与MySQL交互指南:从基础到进阶
    本文深入探讨了Python与MySQL数据库的集成方法,包括数据库连接、数据表创建、索引管理、数据操作以及如何防止SQL注入等关键内容。适合初学者及希望提升数据库操作技能的开发者。 ... [详细]
  • 探讨如何利用Visual Basic (VB) 将十六进制或二进制字符串写入Windows注册表的方法。 ... [详细]
  • 电子与正电子的相互作用
    本文探讨了电子与正电子之间的基本物理特性及其在现代物理学中的应用,包括它们的产生、湮灭过程以及在粒子加速器和宇宙射线中的表现。 ... [详细]
  • 时序数据是指按时间顺序排列的数据集。通过时间轴上的数据点连接,可以构建多维度报表,揭示数据的趋势、规律及异常情况。 ... [详细]
  • SQL Server中查询表结构与视图的方法,便捷高效
    本文介绍如何在SQL Server中轻松查询表结构和视图,提供简洁高效的SQL语句,特别适用于开发人员。 ... [详细]
  • 一.介绍string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C标准之中 ... [详细]
  • 初学者必备:iBATIS入门指南与常见问题解决
    本文旨在为iBATIS初学者提供一份详细的入门指南,并针对官方文档中示例不足的问题提出解决方案。适合零基础学习者。 ... [详细]
  • C++基础教程:探索随机数生成
    生活充满了不确定性,这些不确定因素使我们的生活更加丰富多彩。本文将探讨如何在C++编程中利用随机数增加程序的趣味性和实用性。 ... [详细]
  • mybatis相关面试题 ... [详细]
  • Hibernate入门指南:单表数据库操作详解
    本文介绍了Hibernate作为全面的ORM框架的基础知识,并详细讲解了在MyEclipse环境中配置Hibernate以及进行基本的数据库单表操作的方法,包括增删改查等常见操作。 ... [详细]
  • 本文探讨了一种有效的方法来检查数据库中是否已存在特定的用户名,如果不存在,则将其添加到数据库中。代码示例展示了如何使用SQL查询和C#编程实现这一功能。 ... [详细]
  • 探讨如何在C++中,当子类实例存储在父类类型的向量中时,正确访问子类特有的成员变量或方法。 ... [详细]
  • 在现代移动应用开发中,尤其是iOS应用,处理来自服务器的JSON数据是一项基本技能。无论是使用Swift还是PHP,有效地解析和利用JSON数据对于提升用户体验至关重要。本文将探讨如何在Swift中优雅地处理JSON,以及PHP中处理JSON的一些技巧。 ... [详细]
  • PHP网站部署指南:从零开始搭建PHP网站
    本文提供了详细的步骤指导,帮助开发者在不同环境下成功部署PHP网站,包括在IIS和Apache服务器上的具体操作。 ... [详细]
author-avatar
清新的淡淡茶绿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有