当前位置: 首页 > news >正文

ios swift sqlite3 简单使用

一.创建Person类

import UIKitclass Person: NSObject {var name:String? = nilvar sex:String? = nilvar age:String? = niloverride func setValue(_ value: Any?, forUndefinedKey key: String) {}}

二.在使用的地方导入sqlite.3头文件,例如方法都在viewcontroller中使用

import UIKit
import SQLite3

三.viewcontroller数据sqlite的增,删,查,等方法

    //打开数据库表func opneDB() -> Bool {let docDir:String! = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).firstlet fileName:String! = docDir + "/demo1.sqlite"if sqlite3_open(fileName, &db) != SQLITE_OK {print("打开数据库失败")return false} else {print("打开数据库成功")return true}}//创建数据库表func creatTable() ->Bool {let sql = "CREATE TABLE persontable(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,name TEXT NOT NULL, age TEXT NOT NULL,sex TEXT NOT NULL);"// 第1个参数是 数据库db 第2个是要执行的sql 第3,4个是回调  第5个是错误信息let result = sqlite3_exec(db, sql, nil, nil, nil)return result == SQLITE_OK}// 插入数据func insert(nameText:String, ageText:String, sexText:String) -> Bool{let sql = "insert into persontable(name,age,sex) VALUES(?,?,?);"var stmt: OpaquePointer?let prepareResult = sqlite3_prepare_v2(db, sql, -1, &stmt, nil)if prepareResult != SQLITE_OK {sqlite3_finalize(stmt)if let msg = sqlite3_errmsg(db) {print("insert prepare 发生错误: \(msg)")}return false}let name = (nameText as NSString).utf8Stringlet age = (ageText as NSString).utf8Stringlet sex = (sexText as NSString).utf8Stringsqlite3_bind_text(stmt, 1, name, -1, nil)sqlite3_bind_text(stmt, 2, age, -1, nil)sqlite3_bind_text(stmt, 3, sex, -1, nil)let stepResult = sqlite3_step(stmt)if stepResult != SQLITE_OK && stepResult != SQLITE_DONE {sqlite3_finalize(stmt)if let msg = sqlite3_errmsg(db) {print("insert step 发生错误: \(msg)")}return false}sqlite3_finalize(stmt)return true}// 查询数据func queryAll()-> [Any]? {var persons = [Person]()//根据查询条件查询数据//let namestr:String = "张三"//let sql = "SELECT * FROM persontable WHERE  name LIKE '%\(namestr)%';"let sql = "SELECT * FROM persontable ;"var stmt: OpaquePointer?// 编译let prepareResult = sqlite3_prepare_v2(db, sql, -1, &stmt, nil)if prepareResult != SQLITE_OK {// 关闭语句句柄sqlite3_finalize(stmt)if let msg = sqlite3_errmsg(db) {print("insert prepare 发生错误: \(msg)")}return []}while sqlite3_step(stmt) == SQLITE_ROW {let person = Person()//let index = String.init(cString: sqlite3_column_text(stmt, 0)!)let name = String.init(cString: sqlite3_column_text(stmt, 1)!)let age = String.init(cString: sqlite3_column_text(stmt, 2)!)let sex = String.init(cString: sqlite3_column_text(stmt, 3)!)print("查询数据----\(name)--\(age)--\(sex)")person.name = nameperson.age = ageperson.sex = sexpersons.append(person)}sqlite3_finalize(stmt)print("查询数据库成功")return persons}//更新列表func update(name: String, toName: String) -> Bool {//根据条件删除let sql = "update persontable set tradename = '\(toName)' where tradename = '\(name)'";return self.exec(sql: sql)}// 删除数据func delete(name: String) -> Bool{//删除sql语句//let sql = "delete from qingmeitable where tradename = '\(name)'"let sql = "delete from persontable "return self.exec(sql: sql)}// 执行编译sqlprivate func exec(sql: String) -> Bool{// sqlite3_stmt指针var stmt: OpaquePointer?// 编译let prepareResult = sqlite3_prepare_v2(self.db, sql, -1, &stmt, nil)if prepareResult != SQLITE_OK {// 关闭语句句柄sqlite3_finalize(stmt)if let msg = sqlite3_errmsg(db) {print("delete prepare 发生错误: \(msg)")}return false}let stepResult = sqlite3_step(stmt)if stepResult != SQLITE_OK && stepResult != SQLITE_DONE {sqlite3_finalize(stmt)if let msg = sqlite3_errmsg(db) {print("delete step 发生错误: \(msg)")}return false}sqlite3_finalize(stmt)return true}

参考链接

相关文章:

ios swift sqlite3 简单使用

一.创建Person类 import UIKitclass Person: NSObject {var name:String? nilvar sex:String? nilvar age:String? niloverride func setValue(_ value: Any?, forUndefinedKey key: String) {}} 二.在使用的地方导入sqlite.3头文件,例如方法都在viewcontr…...

长古诗(一)

春江花月夜 【作者】张若虚 【朝代】 春江潮水连海平,海上明月共潮生。 滟滟随波千万里,何处春江无月明! 江流宛转绕芳甸,月照花林皆似霰; 空里流霜不觉飞,汀上白沙看不见。 江天一色无纤尘&#x…...

VC++ 预编译头学习

头文件的作用,就是把自己的 所有内容直接“粘贴”到相应的 #include 语句处。 编译器在编译你的程序的时候,所做 的第一件事,也就是展开所有的 #include 语句和 #define 语句。 头文件的出现,给书写程序带来了很大方便。 到了 Windows 时代后,慢慢 就呈现出一些问题。 几…...

JVM内存模型:理解Java程序的内存管理

JVM内存模型:理解Java程序的内存管理 在Java编程中,JVM(Java虚拟机)是程序的运行环境,它负责管理程序的内存。JVM内存模型是Java语言规范中定义的一套规则,用于描述在JVM中程序如何通过内存来交互和操作。…...

golang opt-in transparent telemetry

目录 1. golang opt-in transparent telemetry1.1. Getting started1.2. Learning Go1.3. Troubleshooting 1. golang opt-in transparent telemetry Recent gopls release (v0.14) includes opt-in transparent telemetry. Telemetry uploading is off by default even when…...

数据资产“入表”是不是红利?国企怎么认识?怎么利用?

毫无疑问,数字资产入表是红利。 数据资产入表意味着将数据资源作为企业资产进行确认和计量,解决了数据资源作为非物质资产未被充分认可和有效计量的问题,意味着数据完成了从自然资源到经济资产的跨越。上海数据交易所总经理汤奇峰此前表示&a…...

薪资面谈小技巧

从求职者的角度上来说,要求高工资是很正常的,这本身就无可厚非,毕竟金钱是人们衡量一份工作价值的首要因素。但是,我们经常看到这样一种现象,那就是求职者漫天要价。当很想雇佣这个求职者但是其所提薪资无法满足时&…...

基于Java的鲜花商店的设计与实现,ssm+jsp,MySQL数据库,前台用户+后台管理,完美运行,有一万字论文

目录 演示视频 基本介绍 选题背景 系统结构 论文目录 系统截图 演示视频 基本介绍 基于Java的鲜花商店的设计与实现,ssmjsp,MySQL数据库,前台用户后台管理,完美运行,有一万字论文。 前台功能:注册登…...

vue3 父组件调用子组件的方法

在Vue 3中&#xff0c;要使父组件调用子组件的方法&#xff0c;可以通过以下步骤实现&#xff1a; 在子组件中定义一个方法&#xff0c;可以在methods对象中定义该方法。例如&#xff1a; <script> export default { methods: { myMethod() { // 方法逻辑 } } …...

和鲸科技创始人范向伟受邀出席“凌云出海,来中东吧”2023华为云上海路演活动

11月9日&#xff0c;华为云“凌云出海&#xff0c;来中东吧”系列路演活动第二场在上海正式开启。聚焦“创业全球化”&#xff0c;本次活动由华为云携手阿布扎比投资办公室&#xff08;ADIO&#xff09;举办&#xff0c;旨在与渴望出海发展的优秀创业者们共探出海中东新商机。 …...

短路语法 [SUCTF 2019]EasySQL1

打开题目 输入字符的时候啥也不回显。只有输入数字的时候页面有回显 但是当我们输入union&#xff0c;from&#xff0c;sleep&#xff0c;where&#xff0c;order等&#xff0c;页面回显nonono&#xff0c;很明显过滤了这些关键词 最开始我的思路是打算尝试双写绕过 1;ununion…...

鉴源实验室 | DoIP协议网络安全攻击

作者 | 付东杰 上海控安可信软件创新研究院工控网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 背 景 随着科技的迅猛发展&#xff0c;汽车行业正经历着前所未有的数字化变革。现代汽车中使用70多个电子控制单元&#x…...

腾讯云服务器新用户购买优惠多少钱?腾讯云新用户购买优惠

对于新用户来说&#xff0c;腾讯云服务器更是提供了一系列的优惠活动&#xff0c;让你在购买时享受到更多的优惠。那么&#xff0c;腾讯云服务器新用户购买优惠多少钱呢&#xff1f;接下来&#xff0c;让我们一起来了解一下。 腾讯云双十一领9999代金券 https://1111.mian100.…...

超全整理,Pytest自动化测试框架-多进程(pytest-xdist)运行总结...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 平常我们功能测试…...

jbase实现通用码表

没有通用码表的体系是不完美的&#xff0c;当年我用C#能实现的通用码表&#xff0c;现在在java一样的实现了&#xff0c;通用码表对提高开发效率和降低开发成本的作用巨大&#xff0c;开发可以专注写业务&#xff0c;而不必被太多的维护界面束缚。进而体现在产品竞争力上面&…...

工业镜头中的远心镜头与普通镜头的光路

普通镜头&#xff1a; 主光线与镜头光轴有角度&#xff0c;工件上下移动时&#xff0c;像的大小有变化。 FOV&#xff1e;镜头前端直径。 物方远心镜头&#xff1a; 物方主光线平行于光轴&#xff0c;物距发生改变时&#xff0c;像高不会发生改变&#xff0c;测得的物体尺寸大…...

【Qt之QWizardPage】使用

介绍 QWizardPage类是向导页面的基类。 QWizard表示一个向导。每个页面都是一个QWizardPage。当创建自己的向导时&#xff0c;可以直接使用QWizardPage&#xff0c;也可以子类化它以获得更多控制。 页面具有以下属性&#xff0c;由QWizard呈现&#xff1a;a title&#xff0c;…...

自动化测试,5个技巧轻松搞定

想要在质量保证团队中赢得核心&#xff1f;当你组建你的网络应用时要记住这些技巧&#xff0c;可以变得更容易分析并快速创建更多准确可重复的自动化测试。 1.歧义是敌人 尽可能使你的代码具体化。当然&#xff0c;你已经遵循了W3C标准&#xff0c;对吗&#xff1f;以下有三件…...

EasyWeChat调用企业微信接口获取客户群数据

use EasyWeChat\Factory; use fast\Http;$config [corp_id > Config::get(site.corp_id),agent_id > Config::get(site.agend_id), // 如果有 agend_id 则填写secret > Config::get(site.agent_secret),// 指定 API 调用返回结果的类型&#xff1a;array(default)…...

sql 左联 右联

...

终极指南:如何使用Python实现同花顺自动化程序交易

终极指南&#xff1a;如何使用Python实现同花顺自动化程序交易 【免费下载链接】jqktrader 同花顺自动程序化交易 项目地址: https://gitcode.com/gh_mirrors/jq/jqktrader 在量化投资领域&#xff0c;自动化交易已成为专业投资者的标准配置。本文将详细介绍如何利用jqk…...

深度学习优化算法详解:从 SGD 到 AdamW

深度学习优化算法详解&#xff1a;从 SGD 到 AdamW 1. 背景与动机 优化算法是深度学习训练的核心&#xff0c;选择合适的优化器直接影响模型的收敛速度和最终性能。本文深入分析主流优化算法的原理和适用场景。 2. 梯度下降家族 2.1 SGD import torch import torch.nn as nnopt…...

AI集成开发工程师的技术实践与转型之路

第一章:技术架构演进与AI融合趋势 1.1 传统开发范式的演进 现代软件开发正经历从单一业务系统向智能化业务系统的转型。传统的.NET技术栈作为企业级应用开发的基石,其技术架构也在不断演进: // 典型的三层架构示例 public class BusinessLogic {private readonly IDataAc…...

renren-fast-vue系统配置中心使用指南:灵活配置与动态切换

renren-fast-vue系统配置中心使用指南&#xff1a;灵活配置与动态切换 【免费下载链接】renren-fast-vue renren-fast-vue基于vue、element-ui构建开发&#xff0c;实现renren-fast后台管理前端功能&#xff0c;提供一套更优的前端解决方案。 项目地址: https://gitcode.com/…...

秋招简历模板下载怎么选?6款主流简历模板工具深度测评

秋招季来临&#xff0c;对应届生来说&#xff0c;简历是踏入职场的第一块敲门砖&#xff0c;而一份贴合岗位需求、契合HR筛选思路的简历模板&#xff0c;既能降低简历制作难度&#xff0c;也是提高简历初筛通过率的关键。如今市面上的简历模板工具五花八门&#xff0c;功能定位…...

51单片学习ing

现在能够实现LED闪烁了&#xff01;&#xff01; 开心 今天学习了让LED闪烁以及LED流水灯&#xff0c;主要是了解了软件延时计算器这个工具 现在可以更灵活的变换LED的变换速度了&#xff0c;如下&#xff1a; 接下来学习到了c语言里模块化的思想&#xff0c;之前学习c的时候…...

C++ 网络服务端主线:从线程池到 Reactor 的完整路线图

一、为什么要写这个系列&#xff1f; 前面我已经把 C 并发基础和线程池完整走了一遍&#xff1a; std::threadstd::mutexstd::condition_variablestd::atomic手写线程池future / 拒绝策略 / 优雅关闭 但到这里&#xff0c;其实还只停留在&#xff1a; 并发组件层 也就是说&a…...

飞机上吸烟还叫嚣“憋得难受”?

坐飞机最怕遇到什么&#xff1f;不是延误&#xff0c;也不是颠簸&#xff0c;而是那种不拿一飞机人性命当回事的“巨婴”旅客。就在昨天&#xff08;3月29日&#xff09;&#xff0c;四川航空一架从成都飞往尼泊尔加德满都的航班上&#xff0c;就出了这么一档子事儿。一位“老烟…...

告别重复劳动:用快马生成deerflow式工作流,提升开发效率十倍

最近在尝试优化日常开发流程时&#xff0c;发现很多重复性的代码检查工作特别耗时。于是研究了下如何用InsCode(快马)平台快速搭建一个deerflow风格的自动化工具&#xff0c;效果出乎意料的好。这里分享下具体实现思路和体验。 为什么需要自动化工作流 每次提交代码前&#x…...

3分钟搞定加密音乐:Unlock-Music浏览器解密终极指南

3分钟搞定加密音乐&#xff1a;Unlock-Music浏览器解密终极指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: https:/…...