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}

参考链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/144974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【二分法】

二分法可以在有序排列中&#xff0c;通过不断对半切割数据&#xff0c;提高数据查找效率。 lst [1,4,6,7,45,66,345,767,788,999] n 66 left 0 right len(lst)-1 while left < right: #边界&#xff0c;当右边比左边还小的时候退出循环 mid (left right)//2 …

adb shell settings高级指令设置系统属性所有的指令汇总+注释

adb shell settings高级指令设置系统属性所有的指令汇总 目录 系统设置&#xff08;system&#xff09; 安全设置&#xff08;secure&#xff09; 全局设置&#xff08;global&#xff09; 删除设置 帮助 示例应用 屏幕超时时间 自动旋转屏幕 通知光 触觉反馈 动…

2023年05月 Python(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 明明每天坚持背英语单词,他建立了英语单词错题本文件“mistakes.txt”,将每天记错的单词增加到该文件中,下列打开文件的语句最合适的是?( ) A: f = open(“mistakes.txt”) B: …

2023.11.16 hivesql高阶函数之开窗函数

目录 1.开窗函数的定义 2.数据准备 3.开窗函数之排序 需求:用三种排序方法查询学生的语文成绩排名,并降序显示 4.开窗函数分组 需求:按照科目来分类,使用三种排序方式来排序学生的成绩 5.聚合函数与分组配合使用 6.聚合函数同时和分组以及排序关键字配合使用 --需求1&…

MySQL主主复制

主1 192.168.66.15 主2 192.168.66.16 主1&#xff1a; roottest2 ~]# hostname master1 [roottest2 ~]# bash [rootmaster1 ~]# vim /etc/my.cnf server-id11 log-binmysql-bin auto_increment_increment2 auto_increment_offset1 replicate-do-dbdemo_db …

缩放图片算法优化 sse

前情提要 这里实现了打印文件的缩放算法 缩放打印文件&#xff08;prt,prn&#xff09; 核心功能如下&#xff1a; void CZoomPrtFile::zoomPrtFile(BYTE* pTargetData) {float xRatio static_cast<float>(m_perWidth - 1) / m_zoomWidth;float yRatio static_cast<…

OpenHarmony应用开发入门教程(一、开篇)

前言 华为正式宣布2024年发布的华为鸿蒙OS Next版将不再兼容安卓系统。这一重大改变&#xff0c;预示着华为鸿蒙OS即将进入一个全新的阶段。 都说科技无国界&#xff0c;这是骗人的鬼话。谷歌的安卓12.0系统早已发布&#xff0c;但是自从受到美影响&#xff0c;谷歌就拒绝再向…

C++实现有理数类 四则运算和输入输出

面试 C 程序员&#xff0c;什么样的问题是好问题&#xff1f; - 知乎 https://www.cnblogs.com/bwjblogs/p/12982908.html

网络安全(大厂面试真题集)

前言 随着国家政策的扶持&#xff0c;网络安全行业也越来越为大众所熟知&#xff0c;想要进入到网络安全行业的人也越来越多。 为了拿到心仪的 Offer 之外&#xff0c;除了学好网络安全知识以外&#xff0c;还要应对好企业的面试。 作为一个安全老鸟&#xff0c;工作这么多年…

android studio导入eclipse项目

网上下载一个老工程&#xff0c;.project文件里有eclipse。 android studio导入eclipse项目 eclipse项目结构 Android studio文件结构 下面是导入步骤&#xff1a; 第一步&#xff0c;打开一个项目。 选择File->New->Import Project 第二步&#xff0c;选择Eclipse项目根…

go test 命令详解

文章目录 1.简介2.test flag3.test/binary flags4.常用选项5.示例参考文献 1.简介 go test 是 Go 用来执行测试函数&#xff08;test function&#xff09;、基准函数&#xff08;benchmark function&#xff09;和示例函数&#xff08;example function&#xff09;的命令。 …

如何设计开发一对一交友App吸引更多活跃用户

在当今社交媒体时代&#xff0c;一对一交友App开发正日渐成为发展热点。如何吸引更多活跃用户成为开发者们的首要任务。通过本文&#xff0c;我们将探讨一系列方法&#xff0c;助您设计开发一对一交友App&#xff0c;吸引更多用户的关注和参与&#xff0c;提升App的活跃度。 了…

elementplus DateTimePicker 日期范围选择器 设置默认时间范围为当前月的起始时间到结束时间

代码如下&#xff1a; <el-date-pickerv-model"value"type"datetimerange"start-placeholder"Start Date"end-placeholder"End Date":default-time"defaultTime" />const defaultTime: [Date, Date] [new Date(2000…

小米手环8pro重新和手机配对解决办法

如果更换了手机&#xff0c;那么小米手环8pro是无法和新手机自动连接的。 但是在新手机上直接连接又连接不上&#xff0c;搜索蓝牙根本找不到手环的蓝牙。 解决办法就是&#xff1a; 把手环恢复出厂&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 是的&…

服务器数据恢复—服务器raid5离线磁盘上线同步失败的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 某品牌DL380服务器中有一组由三块SAS硬盘组建的RAID5阵列。数据库存放在D分区&#xff0c;数据库备份存放在E分区。 服务器上有一块硬盘的状态灯显示红色&#xff0c;D分区无法识别&#xff0c;E分区可识别&#xff0c;但是拷贝文件报…

MATLAB算法实战应用案例精讲-【人工智能】ROS机器人(最终篇)

目录 传统六轴机器人的基本构成及特点 传统关节机器人基本构成 六轴串联机器人“轴”作用 六轴串联机器人优劣势

Node.js详解

一、是什么 Node.js 是一个开源与跨平台的 JavaScript 运行时环境 在浏览器外运行 V8 JavaScript 引擎&#xff08;Google Chrome 的内核&#xff09;&#xff0c;利用事件驱动、非阻塞和异步输入输出模型等技术提高性能 可以理解为 Node.js 就是一个服务器端的、非阻塞式I/…

【XTDrone Ubuntu20.04】XTDrone+ Ubuntu20.04 + PX4安装

XTDrone仿真平台配置 文章目录 XTDrone仿真平台配置依赖安装 ROS一键安装Marvos安装PX4 安装安装QTGroundControlXTDrone下载安装 环境&#xff1a; VMWare 16.0 Ubuntu 22.04 &#xff08;因为没人配过&#xff09;Ubuntu 20.04 参考文章&#xff1a; 仿真平台基础配置 (yuq…

Qt QWebSocket实现JS调用C++

目录 前言1、QWebChannel如何与网页通信2、QWebSocketQWebChannel与网页通信2.1 WebSocketTransport2.2 WebSocketClientWrapper2.3 初始化WebSocket服务器2.4 前端网页代码修改 总结 前言 本篇主要介绍实现JS调用C的另一种方式&#xff0c;即QWebSocketQWebChannel。与之前的…

RabbitMQ之消息应答和持久化

文章目录 前言一、消息应答1.概念2.自动应答3.消息应答方法4.Multiple 的解释5.消息自动重新入队6.消息手动应答代码7.手动应答效果演示 二、RabbitMQ持久化1.概念2.队列如何实现持久化3.消息实现持久化4.不公平分发5.预取值 总结 前言 在RabbitMQ中&#xff0c;我们的消费者在…