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


那么我们就可以根据以上说明在自己的项目中实践一下。
上代码:(增加字段方法)
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命令允许用户重命名表或将一个新列添加到现有表中。
网友评论