简单的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的增删改查

 

posted @   Mr·Xu  阅读(1216)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
点击右上角即可分享
微信分享提示