zoukankan      html  css  js  c++  java
  • [Swift通天遁地]七、数据与安全-(5)高效操作SQLite数据库

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10303151.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    目录:[Swift]通天遁地Swift

    本文将演示使用开源类库对SQLite数据库进行高效操作。

    首先确保在项目中已经安装了所需的第三方库。

    点击【Podfile】,查看安装配置文件。

    1 platform :ios, ‘12.02 use_frameworks!
    3 
    4 target 'DemoApp' do
    5     source 'https://github.com/CocoaPods/Specs.git'
    6     pod 'SQLite.swift'
    7 end

    根据配置文件中的相关配置,安装第三方库。

    在项目导航区,打开视图控制器的代码文件【ViewController.swift】

    依次实现数据库和数据表的创建,以及常见的增、删、改、查等数据库操作。

      1 import UIKit
      2 //引入已经安装的第三方类库
      3 import SQLite
      4 
      5 class ViewController: UIViewController {
      6     
      7     override func viewDidLoad() {
      8         super.viewDidLoad()
      9         // Do any additional setup after loading the view, typically from a nib.
     10         //创建数据库和数据表。
     11         createTable()
     12         //往数据表中插入几条数据
     13         insertData()
     14         //对数据进行检索操作
     15         findRecords()
     16         //往数据表中插入几条数据
     17         findRecords()
     18         //对数据进行检索和更新操作
     19         filterAndUpdateRecords()
     20         //对数据进行删除操作。
     21         deleteRecords()
     22         //执行SQL语句。
     23         executeSQL()
     24     }
     25     
     26     //添加一个方法,用来创建数据库和数据表。
     27     func createTable()
     28     {
     29         //添加一个异常捕捉语句,用来创建数据库和数据表。
     30         do
     31         {
     32             //初始化一个沙箱中的文件路径,作为数据库保存的位置。
     33             let path = NSHomeDirectory() + "/Documents/db.sqlite3"
     34             print(path)
     35             
     36             //根据数据库的路径,初始化一个数据库连接对象。
     37             let db = try Connection(path)
     38             
     39             //初始化一个指定名称的数据表
     40             let users = Table("users")
     41             //初始化一个整形常量,作为数据表中的id字段。
     42             let id = Expression<Int64>("id")
     43             //初始化一个整形常量,作为数据表中的name字段。
     44             let name = Expression<String?>("name")
     45             //初始化一个整形常量,作为数据表中的email字段。
     46             let email = Expression<String>("email")
     47             
     48             //通过调用数据库连接对象的执行命令,创建一张新的数据表。
     49             try db.run(users.create { t in
     50                 //往数据表中添加一个字段,并设置该字段为数据表的主键。
     51                 t.column(id, primaryKey: true)
     52                 //将name字段也添加到数据表中
     53                 t.column(name)
     54                 //将email字段也添加到数据表中,
     55                 //并设置邮箱字段中的数据具有唯一性。
     56                 t.column(email, unique: true)
     57             })
     58         }
     59         catch
     60         {
     61             print("Something went wrong :(")
     62         }
     63     }
     64     
     65     //添加一个方法,往数据表中插入几条数据。
     66     func insertData()
     67     {
     68         //添加一个异常捕捉语句,用来执行数据的插入操作。
     69         do
     70         {
     71             //初始化一个字符串常量,作为数据库文件所在的路径。
     72             let path = NSHomeDirectory() + "/Documents/db.sqlite3"
     73             //创建数据库连接对象
     74             let db = try Connection(path)
     75             
     76             //创建一个数据表对象
     77             let users = Table("users")
     78             //初始化两个字段,分别表示名称字段和邮箱字段。
     79             let name = Expression<String?>("name")
     80             let email = Expression<String>("email")
     81             
     82             //往数据表中插入一条记录,
     83             //并设置这条记录的两个字段的值。
     84             let insert = users.insert(name <- "Alice", email <- "alice@strengthen.com")
     85             //通过调用数据库连接对象的执行命令,执行数据表插入语句。
     86             //并获得返回的记录的唯一标识符。
     87             let rowid = try db.run(insert)
     88             //在控制台输出记录的唯一标识符。
     89             print(">>>>>>>>>>>(rowid)")
     90         }
     91         catch
     92         {
     93             print("Something went wrong :(")
     94         }
     95     }
     96     
     97     //添加一个方法,对数据进行检索操作
     98     func findRecords()
     99     {
    100         //添加一个异常捕捉语句,对数据进行检索操作
    101         do
    102         {
    103             //初始化一个字符串常量,作为数据库文件所在的路径。
    104             let path = NSHomeDirectory() + "/Documents/db.sqlite3"
    105             //创建数据库连接对象
    106             let db = try Connection(path)
    107             //创建一个数据表对象
    108             let users = Table("users")
    109             
    110             //初始化三个字段常量
    111             let id = Expression<Int64>("id")
    112             let name = Expression<String?>("name")
    113             let email = Expression<String>("email")
    114             
    115             //通过调用数据库连接对象的指定方法,获得指定表中的所有记录。
    116             //并对记录列表进行遍历。
    117             for user in try db.prepare(users)
    118             {
    119                 //在控制台输出记录的各个字段的值
    120                 print(">>>>>>>id: (user[id]), name: (String(describing: user[name])), email: (user[email])")
    121             }
    122             
    123             //通过调用数据库连接对象的指定方法,获得指定表中的所有记录的数量。
    124             let count = try db.scalar(users.count)
    125             //并在控制台输出
    126             print(">>>>>>>(count)")
    127         }
    128         catch
    129         {
    130             print("Something went wrong :(")
    131         }
    132     }
    133     
    134     //添加一个方法,对数据进行检索和更新操作
    135     func filterAndUpdateRecords()
    136     {
    137         //添加一个异常捕捉语句,对数据进行检索和更新操作
    138         do
    139         {
    140             //初始化一个字符串常量,作为数据库文件所在的路径。
    141             let path = NSHomeDirectory() + "/Documents/db.sqlite3"
    142             //创建数据库连接对象
    143             let db = try Connection(path)
    144             //创建一个数据表对象
    145             let users = Table("users")
    146             
    147             //初始化三个字段常量
    148             let id = Expression<Int64>("id")
    149             let name = Expression<String?>("name")
    150             let email = Expression<String>("email")
    151             
    152             //通过调用数据库连接对象的过滤方法,查找索引值为1的记录。
    153             let user = users.filter(id == 1)
    154             //通过调用数据库连接对象的执行方法,执行数据表的更新操作。
    155             //替换索引值为1的记录的邮箱字段中的数据。
    156             let result = try db.run(user.update(email <- email.replace("strengthen.com", with: "strengthen.net")))
    157             print(">>>>>>>id: (result)")
    158             
    159             //再次检索数据表中的所有数据,并通过一个循环。
    160             for user in try db.prepare(users)
    161             {
    162                 //在控制台输出记录的各个字段的值。
    163                 print(">>>>>>>id: (user[id]), name: (String(describing: user[name])), email: (user[email])")
    164             }
    165         }
    166         catch
    167         {
    168             print("Something went wrong :(")
    169         }
    170     }
    171     
    172     //添加一个方法,对数据进行删除操作。
    173     func deleteRecords()
    174     {
    175         //添加一个异常捕捉语句,执行对数据的删除操作。
    176         do
    177         {
    178             //初始化一个字符串常量,作为数据库文件所在的路径。
    179             let path = NSHomeDirectory() + "/Documents/db.sqlite3"
    180             //创建数据库连接对象
    181             let db = try Connection(path)
    182             //创建一个数据表对象
    183             let users = Table("users")
    184             
    185             //初始化一个字段常量
    186             let id = Expression<Int64>("id")
    187             //通过调用数据库连接对象的过滤方法,查找索引值为1的记录。
    188             let user = users.filter(id == 1)
    189             //通过调用数据库连接对象的执行方法,执行数据表的删除操作。
    190             let resut = try db.run(user.delete())
    191             //在控制台输出删除操作的执行结果。
    192             print(">>>>>>>(resut)")
    193             
    194             //通过调用数据库连接对象的方法,获得指定表中的所有记录的数量。
    195             let count = try db.scalar(users.count)
    196             print(">>>>>>>(count)")
    197         }
    198         catch
    199         {
    200             print("Something went wrong :(")
    201         }
    202     }
    203     
    204     //添加一个方法,执行SQL语句。
    205     func executeSQL()
    206     {
    207         //添加一个异常捕捉语句,执行SQL语句。
    208         do
    209         {
    210             //初始化一个字符串常量,作为数据库文件所在的路径。
    211             let path = NSHomeDirectory() + "/Documents/db.sqlite3"
    212             //创建数据库连接对象
    213             let db = try Connection(path)
    214             //通过调用数据库连接对象的方法,执行一条用来插入的语句。
    215             let stmt = try db.prepare("INSERT INTO users (email) VALUES (?)")
    216             //通过一个循环,往数据表中依次插入两个记录。
    217             for email in ["leo@strengthen.com", "jame@strengthen.com"]
    218             {
    219                 try stmt.run(email)
    220             }
    221             
    222             //在控制台输出,数据库连接对象的状态信息。
    223             print(">>>>>>>(db.totalChanges)")
    224             print(">>>>>>>(db.changes)")
    225             print(">>>>>>>(db.lastInsertRowid)")
    226             
    227             //通过一条语句,执行一次查询操作,
    228             for row in try db.prepare("SELECT id, email FROM users")
    229             {
    230                 //查询并输出表中的所有索引值和邮箱信息
    231                 print(">>>>>>>id: (row[0] ?? ""), email: (row[1] ?? "")")
    232             }
    233             
    234             //执行一条查询所有记录数量的语句
    235             let result = try db.scalar("SELECT count(*) FROM users")
    236             //并在控制台输出记录的数量
    237             print(">>>>>>>(result ?? 0)")
    238         }
    239         catch
    240         {
    241             print("Something went wrong :(")
    242         }
    243     }
    244     
    245     override func didReceiveMemoryWarning() {
    246         super.didReceiveMemoryWarning()
    247         // Dispose of any resources that can be recreated.
    248     }
    249 }
  • 相关阅读:
    服务器错误日志
    IfcCurveBoundedSurface
    Ifc发展历史与版本介绍
    IfcCurveBoundedPlane
    IfcRationalBSplineSurfaceWithKnots
    IfcBSplineSurfaceWithKnots
    QDateTime QString
    IFC4 标准中的流程实体
    IFC 标准的定义
    MultipartFile
  • 原文地址:https://www.cnblogs.com/strengthen/p/10303151.html
Copyright © 2011-2022 走看看