简单的Sqlite使用方法

  Sqlite的作用不言而喻,就是帮助开发者建立本地数据库,存储一些基本信息。不做过多阐述,需要的深入了解的可以找度娘,本文是针对Sqlite小白在使用上提供一些实例。

一、导入Sqlite.swift

pod ‘SQLite.swift‘

二、建立数据库实例

  以下表字段做实例说明。

  (1)与数据库建立连接

//与数据库建立连接
    mutating func connectDataBase(filePath:String = "/Documents") -> Void {
        let sqliteFilePath = NSHomeDirectory() + filePath + "/db.sqlite3"

        do {
            //与数据库建立连接
            db = try Connection(sqliteFilePath)
            print("与数据库建立连接 成功")
        }catch{
            print("与数据库建立连接 失败:\(error)")
        }
    }

  (2)建立TATLE_LAMP表

let TABLE_LAMP = Table("table_lamp")//表名称
    let TABLE_LAMP_ID = Expression<Int64>("lamp_id")//列表项及项类型
    let TABLE_LAMP_ADDRESS = Expression<Int64>("lamp_address")
    let TABLE_LAMP_NAME = Expression<String>("lamp_name")
    let TABLE_LAMP_COLOR_VALUE = Expression<String>("lamp_colorValue")
    let TABLE_LAMP_LAMP_TYPE = Expression<Int64>("lamp_lampType")

//建立表
    func tableLampCreate() -> Void {
        do {
            //创建表TABLE_LAMP
            try db.run(TABLE_LAMP.create { table in
                table.column(TABLE_LAMP_ID, primaryKey: .autoincrement) // 主键自加且不为空
                table.column(TABLE_LAMP_ADDRESS)
                table.column(TABLE_LAMP_NAME)
                table.column(TABLE_LAMP_COLOR_VALUE)
                table.column(TABLE_LAMP_LAMP_TYPE)
            })
            print("创建TABLE_LAMP表 成功")
        }catch{
            print("创建表TABLE_LAMP 失败:\(error)")
        }
    }

  (3)插入记录

 //插入
    func tableLampInsert(address:Int64,name:String,colorValue:String,lampType:Int64) -> Void {
        let insert = TABLE_LAMP.insert(TABLE_LAMP_ADDRESS <- address, TABLE_LAMP_NAME <- name,TABLE_LAMP_COLOR_VALUE <- colorValue,TABLE_LAMP_LAMP_TYPE <- lampType)
        do {
            let rowid = try db.run(insert)
            print("插入数据成功 id:\(rowid)")
        } catch {
            print("插入数据失败 \(error)")
        }
    }

  (4)遍历数据库及读取某条记录

//遍历数据库
    func queryTableLamp() -> Void {
        for item in (try! db.prepare(TABLE_LAMP)) {
            print("灯光 遍历 ———— id: \(item[TABLE_LAMP_ID]), address: \(item[TABLE_LAMP_ADDRESS]), name: \(item[TABLE_LAMP_NAME]), colorValue: \(item[TABLE_LAMP_COLOR_VALUE]), lampType: \(item[TABLE_LAMP_LAMP_TYPE])")

        }
    }

    //读取
    func tableLampRead(address:Int64) -> Void {
        for item in try! db.prepare(TABLE_LAMP.filter(TABLE_LAMP_ADDRESS == address)) {
            print("\n读取(灯光)id: \(item[TABLE_LAMP_ID]), address: \(item[TABLE_LAMP_ADDRESS]), name: \(item[TABLE_LAMP_NAME]), colorValue: \(item[TABLE_LAMP_COLOR_VALUE]), lampType: \(item[TABLE_LAMP_LAMP_TYPE])")
        }
    }

  (5)更新单条记录

 //更新
    func tableLampUpdate(address:Int64,newName:String) -> Void {
        let item = TABLE_LAMP.filter(TABLE_LAMP_ADDRESS == address)
        do {
            if try db.run(item.update(TABLE_LAMP_NAME <- newName)) > 0 {
                print("灯光\(address)更新成功")
            } else {
                print("没有发现 灯光条目 \(address)")
            }
        } catch {
            print("灯光\(address)更新失败:\(error)")
        }
    }

  (6)删除单条记录

//删除
    func tableLampDelete(address:Int64) -> Void {
        let item = TABLE_LAMP.filter(TABLE_LAMP_ADDRESS == address)
        do {
            if try db.run(item.delete()) > 0 {
                print("灯光\(address) 删除成功")
            } else {
                print("没有发现 灯光条目 \(address)")
            }
        } catch {
            print("灯光\(address) 删除失败:\(error)")
        }
    }

  (7)使用数据库完成常规操作

 //数据库建立连接
        dataBase = NADataBaseSqlite()

        //建立列表(有列表后不再建立)
        dataBase.tableLampCreate()

        //插入两条数据
        dataBase.tableLampInsert(address: 51, name: "灯光1", colorValue: "#FFFFFF", lampType: 0)
        dataBase.tableLampInsert(address: 52, name: "灯光2", colorValue: "#AAAAAA", lampType: 1)

        //遍历列表(检查插入结果)
        dataBase.queryTableLamp()

        //根据条件查询
        dataBase.tableLampRead(address: 52)

        //修改列表项
        dataBase.tableLampUpdate(address: 51, newName: "客厅大灯")

        //遍历列表(检查修改结果)
        dataBase.queryTableLamp()

        //删除列表项
        dataBase.tableLampDelete(address: 52)

        //遍历列表(检查删除结果)
        dataBase.queryTableLamp()

附:完成的实现代码

//
//  ViewController.swift
//  SqliteSwiftDemo
//
//  Created by xjf on 2019/4/14.
//  Copyright © 2019 xfj. All rights reserved.
//

import UIKit
import HandyJSON

class ViewController: UIViewController {
    var dataBase : NADataBaseSqlite!
    override func viewDidLoad() {
        super.viewDidLoad()

        //数据库建立连接
        dataBase = NADataBaseSqlite()

        //建立列表(有列表后不再建立)
        dataBase.tableLampCreate()

        //插入两条数据
        dataBase.tableLampInsert(address: 51, name: "灯光1", colorValue: "#FFFFFF", lampType: 0)
        dataBase.tableLampInsert(address: 52, name: "灯光2", colorValue: "#AAAAAA", lampType: 1)

        //遍历列表(检查插入结果)
        dataBase.queryTableLamp()

        //根据条件查询
        dataBase.tableLampRead(address: 52)

        //修改列表项
        dataBase.tableLampUpdate(address: 51, newName: "客厅大灯")

        //遍历列表(检查修改结果)
        dataBase.queryTableLamp()

        //删除列表项
        dataBase.tableLampDelete(address: 52)

        //遍历列表(检查删除结果)
        dataBase.queryTableLamp()
    }

}

ViewController

//
//  NADataBaseSqlite.swift
//  SqliteSwiftDemo
//
//  Created by xjf on 2019/4/15.
//  Copyright © 2019 xjf. All rights reserved.
//

import Foundation
import SQLite

struct NADataBaseSqlite {

    var db : Connection!

    init() {
        connectDataBase()
    }

    //与数据库建立连接
    mutating func connectDataBase(filePath:String = "/Documents") -> Void {
        let sqliteFilePath = NSHomeDirectory() + filePath + "/db.sqlite3"

        do {
            //与数据库建立连接
            db = try Connection(sqliteFilePath)
            print("与数据库建立连接 成功")
        }catch{
            print("与数据库建立连接 失败:\(error)")
        }
    }

    let TABLE_LAMP = Table("table_lamp")//表名称
    let TABLE_LAMP_ID = Expression<Int64>("lamp_id")//列表项及项类型
    let TABLE_LAMP_ADDRESS = Expression<Int64>("lamp_address")
    let TABLE_LAMP_NAME = Expression<String>("lamp_name")
    let TABLE_LAMP_COLOR_VALUE = Expression<String>("lamp_colorValue")
    let TABLE_LAMP_LAMP_TYPE = Expression<Int64>("lamp_lampType")

    //建立表
    func tableLampCreate() -> Void {
        do {
            //创建表TABLE_LAMP
            try db.run(TABLE_LAMP.create { table in
                table.column(TABLE_LAMP_ID, primaryKey: .autoincrement) // 主键自加且不为空
                table.column(TABLE_LAMP_ADDRESS)
                table.column(TABLE_LAMP_NAME)
                table.column(TABLE_LAMP_COLOR_VALUE)
                table.column(TABLE_LAMP_LAMP_TYPE)
            })
            print("创建TABLE_LAMP表 成功")
        }catch{
            print("创建表TABLE_LAMP 失败:\(error)")
        }
    }

    //插入
    func tableLampInsert(address:Int64,name:String,colorValue:String,lampType:Int64) -> Void {
        let insert = TABLE_LAMP.insert(TABLE_LAMP_ADDRESS <- address, TABLE_LAMP_NAME <- name,TABLE_LAMP_COLOR_VALUE <- colorValue,TABLE_LAMP_LAMP_TYPE <- lampType)
        do {
            let rowid = try db.run(insert)
            print("插入数据成功 id:\(rowid)")
        } catch {
            print("插入数据失败 \(error)")
        }
    }

    //遍历数据库
    func queryTableLamp() -> Void {
        for item in (try! db.prepare(TABLE_LAMP)) {
            print("灯光 遍历 ———— id: \(item[TABLE_LAMP_ID]), address: \(item[TABLE_LAMP_ADDRESS]), name: \(item[TABLE_LAMP_NAME]), colorValue: \(item[TABLE_LAMP_COLOR_VALUE]), lampType: \(item[TABLE_LAMP_LAMP_TYPE])")

        }
    }

    //读取
    func tableLampRead(address:Int64) -> Void {
        for item in try! db.prepare(TABLE_LAMP.filter(TABLE_LAMP_ADDRESS == address)) {
            print("\n读取(灯光)id: \(item[TABLE_LAMP_ID]), address: \(item[TABLE_LAMP_ADDRESS]), name: \(item[TABLE_LAMP_NAME]), colorValue: \(item[TABLE_LAMP_COLOR_VALUE]), lampType: \(item[TABLE_LAMP_LAMP_TYPE])")
        }
    }

    //更新
    func tableLampUpdate(address:Int64,newName:String) -> Void {
        let item = TABLE_LAMP.filter(TABLE_LAMP_ADDRESS == address)
        do {
            if try db.run(item.update(TABLE_LAMP_NAME <- newName)) > 0 {
                print("灯光\(address)更新成功")
            } else {
                print("没有发现 灯光条目 \(address)")
            }
        } catch {
            print("灯光\(address)更新失败:\(error)")
        }
    }

    //删除
    func tableLampDelete(address:Int64) -> Void {
        let item = TABLE_LAMP.filter(TABLE_LAMP_ADDRESS == address)
        do {
            if try db.run(item.delete()) > 0 {
                print("灯光\(address) 删除成功")
            } else {
                print("没有发现 灯光条目 \(address)")
            }
        } catch {
            print("灯光\(address) 删除失败:\(error)")
        }
    }

}

NADataBase

参考连接:Sqlite的增删改查

原文地址:https://www.cnblogs.com/xjf125/p/10710960.html

时间: 2024-11-10 18:23:59

简单的Sqlite使用方法的相关文章

【转】设计模式:简单工厂、工厂方法、抽象工厂之小结与区别

简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式.其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性. 本文是本人对这三种模式学习后的一个小结以及对他们之间的区别的理解. 简单工厂 简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例. 不修改代码的话,是无法扩展的. 工厂方法 工厂方法是针对每一种产品提供一个工厂类.通过不同的工厂实例来创建不同的产品实例. 在同一等级结构中,支持增加任意产品. 抽象工厂 抽象工厂是应

R语言:用简单的文本处理方法优化我们的读书体验

前言 延续之前的用R语言读琅琊榜小说,继续讲一下利用R语言做一些简单的文本处理.分词的事情.其实就是继续讲一下用R语言读书的事情啦,讲讲怎么用它里面简单的文本处理方法,来优化我们的读书体验,如果读邮件和读代码也算阅读的话..用的代码超级简单,不涉及其他包 这里讲两个示例,结尾再来吐槽和总结. 1)R-Blogger订阅邮件拆分 2) R代码库快速阅读方法 不在博客园上阅读时才会看到的,这篇博文归 http://www.cnblogs.com/weibaar所有 仅保证在博客园博客上的排版干净利索

R语言中最简单的向量赋值方法

R语言中最简单的向量赋值方法简介: 1. 生成等差数列的向量x x <- 1:10 #将x向量赋值为1 2 3 4 5 6 7 8 9 10 结果为 > x [1] 1 2 3 4 5 6 7 8 9 10 2. 将x的值全部修改成0 x[] <- 0 #非常简洁的赋值方法,建议使用 x[1:length(x)] <- 0 #不建议使用的赋值方法 结果为: > x[] <- 0 > x [1] 0 0 0 0 0 0 0 0 0 0 3.使用seq函数 x <

设计模式 之 简单工厂与工厂方法

    最近开始学习<大话设计模式>,作者以通俗的方式来讲解,还有故事情节,幽默的对白,给人耳目一新的感觉.非常喜欢作者的这种步步深入,循循善诱的方式.学习了就要总结,总结的时候自己也学着作者的方式,以自己生活中的小例子来实现我们的设计模式.下面就开始我们的第一讲<简单工厂和工厂方法>.     前两天带着一个老乡去吃饭,当然,作为一个四川人,去外边吃饭当然是点我们著名的川菜!下面先用简单工厂来实现一下: using System; using System.Collections

简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别

结合简单示例和UML图,讲解工厂模式简单原理. 一.引子 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰).Bmw(宝马).Audi(奥迪)),还雇了司机为他开车.不过,爆发户坐车时总是这样:上Benz车后跟司机说"开奔驰车!",坐上Bmw后他说"开宝马车!",坐上 Audi后他说"开奥迪车!".你一定说:这人有病!直接说开车不就行了?!而当把这个爆发户的行为放到我们程序语言中来,我们发现C语言一直是通过这种方式来坐车的!幸运的是这种有

简单工厂、工厂方法与抽象工厂大比拼

简单工厂.工厂方法和抽象工厂都属于设计模式创建型,严格意义上简单工厂不属于23设计模式之一(违背了开闭原则),本文为了完整描述三工厂演变过程,对三工厂进行了整体的总结和学习,并通过三者之间的特点比较总结出各自的优缺点. 一.简单工厂: 在没有工厂之前,大家都是自给自足,生产一部车或其他工具都是自己来完成,有了工厂之后,告诉它需求就会出来相应的产品,但生产化水平比较低,工厂分工不太明确,社会上只有一个工厂,不论卡车还是公交车都由它来完成,相当于一个工厂多条生产线. 类图: 代码: /*******

简单工厂VS工厂方法

前言: GOF经典的23种设计模式在IT界现已被广为流传.由于比较长时间没有用了,个人对于不同模式与模式之间的区别也渐渐模糊,故开始重温设计模式的思想.也希望更给对设计模式感兴趣的朋友些许的启发. ---------------------------------- 需求情境: 设计一款具有基本计算功能的计算器. ----------------------------------- 初次看到这个需求,假如你从没有接触过设计模式,那么你应该很快可以把基本的逻辑语句用10行以内的代码搞定. 但是,

设计模式:简单工厂、工厂方法、抽象工厂之小结与区别 (转)

简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式.其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性. 本文是本人对这三种模式学习后的一个小结以及对他们之间的区别的理解. 简单工厂 简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例. 不修改代码的话,是无法扩展的. 工厂方法 工厂方法是针对每一种产品提供一个工厂类.通过不同的工厂实例来创建不同的产品实例. 在同一等级结构中,支持增加任意产品. 抽象工厂 抽象工厂是应

推荐一种简单易学的读书方法

推荐一种简单易学的读书方法 本文由有道云笔记推荐 前段时间我简单统计了一下,从大学毕业后到现在的6年多时间里,总共读了200多本书,平均1年读20-40本,范围涉及企业管理.营销.励志.传记.小说.历史.哲学等等.书读的多了,慢慢的也形成了一套自认为适合自己的读书方法,可以简单地用12个字进行概括:"定目标.列书单.读两遍.致运用".下面我会仔细地跟大家聊聊. 一.定目标(确定读书目标)人的时间和精力是有限的,因此读书.学习都存在成本.为了能够以最小的投入获得最大的产出,我们一定要先确