swift—FMDB表中添加字段

随着app发展以及业务需求的变动,可能会涉及到表中字段的增加。因为FMDB是基于SQL封装的,所以我们可以看到在SQL官网,增加字段的语法是这样的

《swift—FMDB表中添加字段》 1F689F2F413C343E825E3A7F66F6B45D.png
《swift—FMDB表中添加字段》 B4033751D5209DDC31315C189B7D3AFA.png

那么我们就可以根据以上说明在自己的项目中实践一下。

上代码:(增加字段方法)

    func ChangeTable()  {
        if fmdb!.open() {
            if !fmdb!.columnExists("cleanFeedbacks", inTableWithName: "AfeFlightSummaryDataInfo"){
                let sql  = "ALTER TABLE AfeFlightSummaryDataInfo ADD cleanFeedbacks BLOB"
                do{
                    try fmdb!.executeUpdate(sql, values: nil)
                }catch{
                    print(fmdb!.lastErrorMessage())
                }
            }
        }
    }

之后在我们的创建表的方法中调用一下就ok了

//建表

func creatTable()->Void{
let creatSql = "create table if not exists AfeFlightSummaryDataInfo(id integer primary key autoincrement,workcode varchar(256),preparationId INT,case1 varchar(256),case2 varchar(256),case3 varchar(256),case4 varchar(256),case5 varchar(256),case6 varchar(256),innerFeedbacks BLOB,innerFeedbackString varchar(256),scFeedbacks BLOB,scFeedbackString varchar(256),zbFeedbacks BLOB,zbFeedbackString varchar(256),jwFeedbacks BLOB,jwFeedbackString varchar(256),cleanFeedBack varchar(256))"
let result = fmdb!.executeUpdate(creatSql, withArgumentsIn: [])
self.ChangeTable()
if result{
print("创建表成功")
}
}

另:在OC或者swift中 一次增加多个字段我没有找到相关的资料 所以如果有相关的业务需求只能顺序执行一下啦 如果您有更好的解决方案 请告知

代码如下:

//增加字段

func changeTable(){
if fmdb!.open(){
if !fmdb!.columnExists("etd", inTableWithName: "FlightPlanDataInfo"){
let sql  = "ALTER TABLE FlightPlanDataInfo ADD etd varchar(256)"
do{
try fmdb!.executeUpdate(sql, values: nil)
}catch{
print(fmdb!.lastErrorMessage())
}
}
if !fmdb!.columnExists("eta", inTableWithName: "FlightPlanDataInfo"){
let sql  = "ALTER TABLE FlightPlanDataInfo ADD  eta varchar(256) "
do{
try fmdb!.executeUpdate(sql, values: nil)
}catch{
print(fmdb!.lastErrorMessage())
}
}
if !fmdb!.columnExists("delayStatus", inTableWithName: "FlightPlanDataInfo"){
let sql  = "ALTER TABLE FlightPlanDataInfo ADD  delayStatus varchar(256) "
do{
try fmdb!.executeUpdate(sql, values: nil)
}catch{
print(fmdb!.lastErrorMessage())
}
}
if !fmdb!.columnExists("delayReason", inTableWithName: "FlightPlanDataInfo"){
let sql  = "ALTER TABLE FlightPlanDataInfo ADD  delayReason varchar(256)"
do{
try fmdb!.executeUpdate(sql, values: nil)
}catch{
print(fmdb!.lastErrorMessage())
}
}
}
}

关于可不可以在已经存在的表中一次性添加多个字段的问题,已经找到答案:

在SQL官网有这么一句话:

SQLite supports a limited subset of ALTER TABLE. The ALTER TABLE command in SQLite allows the user to rename a table or to add a new column to an existing table.
翻译如下:
SQLite支持ALTER TABLE的有限子集。SQLite中的ALTER TABLE命令允许用户重命名表或将一个新列添加到现有表中。

所以fmdb并不支持一次性将多个字段添加至已存在的表中,只能够顺序执行啦(捂脸)

    原文作者:啥都不会QAQ
    原文地址: https://www.jianshu.com/p/4999be584fe4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞