当前位置:
& Swift - 操作SQLite数据库(引用SQLite3库)
Swift - 操作SQLite数据库(引用SQLite3库)
发布:hangge
阅读:24512
SQLite轻量级数据库在移动应用中使用非常普遍,但是目前的库是C编写的,为了方便使用,对SQLite相关的操作用Swift进行了封装。这个封装代码使用了一个开源项目SQLiteDB,地址是:
重要事项(日):SQLiteBD原作者最后只更新到Swift1.2便停止,说后面不会再更新了,如果使用Xcode7便会报错。我这里在其基础上进行了修改,使其支持Swift2.0。
重要事项(日):SQLiteBD原作者又继续更新了,现在已经完美支持Swift2.0。所以大家可以直接使用,本文使用样例也已同步更新。
重要事项(日):SQLiteBD库已经升级至Swift3,本文使用样例也已同步更新。
下面通过一个样例展示SQlite数据库连接,创建表,查询数据,插入数据等操作。&
1,当输入用户名和手机号,点击保存即可将数据存入数据库&
2,下次启动,自动从数据库中载入初始化信息
操作步骤:
1,在 Build Phases -& Link Binary With Libraries 中点击加号,添加 libsqlite3.0.tbd 到项目中来
2,创建连接头文件Bridging-Header.h
#import "sqlite3.h"
#import &time.h&
3,在项目编译属性里引用头文件
4,导入SQLiteDB的代码(SQLiteDB.swift、SQLTable.swift),代码结构如下:
5,ViewController.swift代码
import UIKit
class ViewController: UIViewController {
var db:SQLiteDB!
@IBOutlet var txtUname: UITextField!
@IBOutlet var txtMobile: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
//获取数据库实例
db = SQLiteDB.shared
//打开数据库
_ = db.openDB()
//如果表还不存在则创建表(其中uid为自增主键)
let result = db.execute(sql: "create table if not exists t_user(uid integer primary key,uname varchar(20),mobile varchar(20))")
print(result)
//如果有数据则加载
initUser()
//点击保存
@IBAction func saveClicked(_ sender: AnyObject) {
saveUser()
//从SQLite加载数据
func initUser() {
let data = db.query(sql: "select * from t_user")
if data.count & 0 {
//获取最后一行数据显示
let user = data[data.count - 1]
txtUname.text = user["uname"] as? String
txtMobile.text = user["mobile"] as? String
//保存数据到SQLite
func saveUser() {
let uname = self.txtUname.text!
let mobile = self.txtMobile.text!
//插入数据库,这里用到了esc字符编码函数,其实是调用bridge.m实现的
let sql = "insert into t_user(uname,mobile) values('\(uname)','\(mobile)')"
print("sql: \(sql)")
//通过封装的方法执行sql
let result = db.execute(sql: sql)
print(result)
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
老代码下载(只支持Swift1.2):
老代码下载(个人修改的支持Swift2.0):
老代码下载(官方支持Swift2):&
最新代码下载(Swift3):
常见问题汇总:
(1)为什么发布程序运行后,会报数据库不存在错误
具体错误信息:“SQLiteDB - failed to copy writable version of DB!
Error - The file “data.db” couldn’t be opened because there is no such file.”
解决办法:你需要在 “工程” -& “Build Phases” -& “Copy Bundle Resources” 中把这个数据库添加进来。这样才能将其随同程序一起部署到手机上。
(2)execute()方法执行后的返回值表示什么
execute() 方法可以用来执行任何非查询的 SQL 语句(INSERT、DELETE、UPDATE、CREATE 等等),其执行后返回的是一个 CInt 类型的值。
返回 0 表示执行失败
返回非 0 表示执行成功 & &(一般是1。如果是 INSERT 命令的话返回的是新插入记录的 ID。DELETE、UPDATE比较特殊,返回的是操作影响的记录数,但如果一条记录都没影响,返回的也是 1。)
(3)如何保存Data数据,比如将图片保存到数据库中?
参考我的另一篇文章:浏览:4261
OnsMqttQueryHistoryOnline 接口根据 GroupId 分组和给定的时间段查询历史在线设备的数量曲线。
查询历史在线设备数曲线的功能一般用于生成业务报表。
由于OpenAPI面向的场景是用户自定义管控开发,服务端 ...
慢? 在线, 索引, 空间, 查询, 性能 云栖社区小编整理 比如Alter INDEX INX_table1_1 rebuild TABLESPACE aaa online; 如果这个表不频繁更新(每天只在凌晨时更新一次),但是很频繁地查询的话,在白天查询期间进行rebuild索引,会不会造成使用这个索引的查询很慢? ...
对于一个超大型数据库(如有100万条记录,每个表又有较多的字段如50个)应该如何实现快速高效的查询。 请各位尽可能提供一下自己的解决思路(最好是方法多一点),谢谢!在线等候! 请求各位斑竹及高手们多发表意见呀! 如何, 实现, 查询, 在线, 数据库 ...
你好,我有一条查询语句,where 中包括几个条件,其中一个字段是索引建值,而其他不是。想请教where 中的条件排列顺序会影响查询的效率吗?(如索引字段放在where的开始或结尾) 谢谢 数据库, 查询, 在线, 语句, where ...
mjgjjf_bak_t.isactive=1 and mjgjjf_bak_t.Jffs&&'冲正' and mjgjjf_bak_t.Jffs&&'抹帐') ) 查询, 在线, 怎样, select, from ...
描述查询指定直播流在指定时间段的历史在线人数,即拉流数的时间序列
Action ...
请大侠指点SAP中查询某期某类产品销售如何操作? 多谢了! 销售额, 如何, 查询, 统计, 在线 ...
dig GUI https://www.diggui.com dig命令在线查询,可以使用几十个公共DNS进行解析查询。 ...
你好,我有两个问题。
1.在数加的在线ide中,查询select结果是有行数限制的,目前看到的是5000行还是10000行限制,这个限制能够在哪里改动配置吗,我想把这个记录数量调整得更小一些,比如100行这种。其主要目的是对某些子账号做权限的限制,防止能看到大量的数据。
一个表有一个联合索引,当字段的顺序不同时,查询的效率也不同,查了下执行计划,就是consistent gets会很多,请大家帮忙看看, 1,当Unique索引(IDENT_TYPE, IDENT_NO, CUST_NAME) &   ...
下面是数据库结构,Relationships是文章表和类别、标签表的关系表,他们是多对多。
我现在在aid=1的详情页面,查询相同相同类别的文章。 这个sql语句怎么写?
目前实现了想要的功能,感谢 @rockman ...
SqlPad 是一个基于 Node.js 开发的直接在浏览器运行 SQL 查询并对结果进行可视化展示。支持 PostgreSQL、MySQL 和 SQL Server。
![screenshot](https://yqfile.alicdn.com ...
OnsMqttQueryClientByTopic 接口根据 MQTT 的 Topic 统计订阅该 Topic 的在线设备的数量。 使用场景 根据 Topic 查询在线设备数量的接口一般用于业务分析。业务上订阅某个特定 Topic 的设备一般是参与某个 ...
OnsMqttQueryClientByGroupId 接口根据 GroupId 统计属于该分组下的在线设备的数量。 使用场景 查询在线设备数量的接口一般用于业务分析,统计一个 GroupId 分组下终端设备的活跃程度。 请求参数列表 名称  ...
这一段时间的SO的状态各异,有刚下单的,有挑选了的,有发料确认了的,有发了货的, 要提取这些SO行当时预留的时间。谢谢 查询, 在线, 提取 ...
描述查询实时直播流的当前在线人数,即实时拉流数
Action ...
OnsMqttQueryClientByTopic 接口根据 MQTT 的 Topic 统计订阅该 Topic 的在线设备的数量。
根据 Topic 查询在线设备数量的接口一般用于业务分析。业务上订阅某个特定 Topic 的设备一般是参与某个 ...
OnsMqttQueryClientByGroupId 接口根据 GroupId 统计属于该分组下的在线设备的数量。
查询在线设备数量的接口一般用于业务分析,统计一个 GroupId 分组下终端设备的活跃程度。
由于OpenAPI面向 ...
共有4598页
你可能感兴趣SQL查询统计问题:请问如何统计出数据库中每件商品在最近四个周各个周的销售量_百度知道
SQL查询统计问题:请问如何统计出数据库中每件商品在最近四个周各个周的销售量
数据库中记录的是某件商品某个时间的销售量,请问如何统计出数据库中每件商品在最近四个周各个周的销售量?行名为商品ID,列名为第一周、第二周、第三周、第四周。
我有更好的答案
ID,sum(case when DATEDIFF(week,now(),销售时间)=1 then 销售量 end) 第一周,sum(case when DATEDIFF(week,now(),销售时间)=2 then 销售量 end) 第二周,sum(case when DATEDIFF(week,now(),销售时间)=3 then 销售量 end) 第三周,sum(case when DATEDIFF(week,now(),销售时间)=4 then 销售量 end) 第四周 from 表 where DATEDIFF(week,now(),销售时间)&5 group by ID;
采纳率:79%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。求sql语句,统计某月销售量前10_百度知道
求sql语句,统计某月销售量前10
a表,字段: id, title,price,sdateid:自动title:商品名称price:价格sdate:日期统计某月商品销量最大的商品前10个.
我有更好的答案
统计商品销量最大的商品:select top 10 title,count(*)as 销量 from a表
where month(sdate)=月份
group by title order by count(title)desc我感觉id应该是自动生成的主键才对,所以不应该对id进行汇总个数。这个地方严格说来应该还有标记唯一商品的编码才对,应该按照商品编码(制定唯一的商品)进行汇总,因为存在商品名称相同,价格不同的情况,这个时候应该视为不同商品。这种情况要另外考虑。如下:select top 10 title,price,count(*)as 销量 from a表
where month(sdate)=月份
group by title,price order by count(*)desc,price顺便问一句怎么没有商品数量字段?统计销量应该是汇总商品数量才对(用sum函数),而不是统计记录个数,如果有的话(将count(*)改为sum(商品数量)即可)
采纳率:43%
按照一行记录代表销售一个数量单位商品的话,T_SQL语句如下:DECLARE @beginDate datetime, @endDate datetimeSELECT @beginDate = '开始日期', @endDate = '结束日期'SELECT TOP 10 title, COUNT(1) AS sellNumber
FROM TableA
WHERE sDate BETWEEN @beginDate AND @endDate
GROUP BY title
select top 10 a表.id ,tt.*
from a表,(select title as vv,count(*) as sort from a表 group by title order by sort desc) as tt where month(sdate)='月份' and a表.title=tt.vv order by sort desc 或是select top 10 id,count(title) as x,price,sdate from a表 month(sdate)='月份' group by id,price,sdate order by count(title) desc 看看哪个适合你
select top 10 title from a where month(sdate)=月份 group by title
你总有一个 销售量的 字段吧.. 直接 top 10 不可以么?
select top 10 字段 from a
加一个 销售量(sales_volume) 吧!
select top 10 sales_volume
order by sales_volume desc
其他5条回答
为您推荐:
其他类似问题
sql语句的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。请问 sqlserver 各个商品各月销售额统计 sql语句怎么写????_百度知道
请问 sqlserver 各个商品各月销售额统计 sql语句怎么写????
表结构:oid 流水号,pid 商品编码,date 销售日期,count 销售数量现在要统计各个商品的年销售额 各月销售额希望结果:商品编码 年销售额 一月销售额 二月销售额 ........
十二月销售额单独统计出来各列很简单 ,请问如何在sql里生成上面的表结构?
我有更好的答案
可以完成,思路如下:通过pid 商品编码分组,得到销售日期的每个月列,后用sum(case&Fact_m&WHEN&月份 then&数量end)来操作即可.--年度售额:select&pid&商品编码,isnull(convert(dec(18,2),sum(case&Fact_m&WHEN&'01'&then&cCost&end)),0)&'countCost_1',isnull(convert(dec(18,2),sum(case&Fact_m&WHEN&'02'&then&cCost&end)),0)&'countCost_2',isnull(convert(dec(18,2),sum(case&Fact_m&WHEN&'03'&then&cCost&end)),0)&'countCost_3',isnull(convert(dec(18,2),sum(case&Fact_m&WHEN&'04'&then&cCost&end)),0)&'countCost_4',isnull(convert(dec(18,2),sum(case&Fact_m&WHEN&'05'&then&cCost&end)),0)&'countCost_5',isnull(convert(dec(18,2),sum(case&Fact_m&WHEN&'06'&then&cCost&end)),0)&'countCost_6',isnull(convert(dec(18,2),sum(case&Fact_m&WHEN&'07'&then&cCost&end)),0)&'countCost_7',isnull(convert(dec(18,2),sum(case&Fact_m&WHEN&'08'&then&cCost&end)),0)&'countCost_8',isnull(convert(dec(18,2),sum(case&Fact_m&WHEN&'09'&then&cCost&end)),0)&'countCost_9',isnull(convert(dec(18,2),sum(case&Fact_m&WHEN&'10'&then&cCost&end)),0)&'countCost_10',isnull(convert(dec(18,2),sum(case&Fact_m&WHEN&'11'&then&cCost&end)),0)&'countCost_11',isnull(convert(dec(18,2),sum(case&Fact_m&WHEN&'12'&then&cCost&end)),0)&'countCost_12',isnull(convert(dec(18,2),sum(cCost)))&'countTotal'&from&Tab&group&by&pid&--Fact_m&指的就是销售日期[月],最后还有一列为年度总计希望能帮到你!
采纳率:62%
;with&&cte_tot&as(&&&&select&PID,sum(count)&totalmoney,convert(varchar(10),month(date))+'月'&date&&from&数据表&with(nolock)&where&date&between&''&and&''&group&by&PID,month(date)&)&select&PID,&sum(totalmoney)&as&totalmoney,&sum(case&date&when&'1月'&then&totalmoney&else&null&end)&as&'1月'&,sum(case&date&when&'2月'&then&totalmoney&else&null&end)&as&'2月'&,sum(case&date&when&'3月'&then&totalmoney&else&null&end)&as&'3月'&,sum(case&date&when&'4月'&then&totalmoney&else&null&end)&as&'4月'&,sum(case&date&when&'5月'&then&totalmoney&else&null&end)&as&'5月'&,sum(case&date&when&'6月'&then&totalmoney&else&null&end)&as&'6月'&,sum(case&date&when&'7月'&then&totalmoney&else&null&end)&as&'7月'&,sum(case&date&when&'8月'&then&totalmoney&else&null&end)&as&'8月'&,sum(case&date&when&'9月'&then&totalmoney&else&null&end)&as&'9月'&,sum(case&date&when&'10月'&then&totalmoney&else&null&end)&as&'10月'&,sum(case&date&when&'11月'&then&totalmoney&else&null&end)&as&'11月'&,sum(case&date&when&'12月'&then&totalmoney&else&null&end)&as&'12月'&from&cte_tot&group&by&PID看看是否你要的结果&
本回答被提问者采纳
为您推荐:
其他类似问题
sql语句的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。