Ios 如何使用executeUpdate-FMdatabase插入新行

Ios 如何使用executeUpdate-FMdatabase插入新行,ios,swift,sqlite,fmdb,Ios,Swift,Sqlite,Fmdb,我正在使用fmdb库 我想插入新记录,但我不知道该怎么做: if let db = database, let q = db.executeUpdate("insert into \(table) (catid,subcat_id,id,subcat_title,title,description,lat,lon,takhfif,images,wifi,apple_health,wc,full_time,pos,work_hours,phone,mobile,fax,website,email

我正在使用
fmdb

我想插入新记录,但我不知道该怎么做:

if let db = database, let q = db.executeUpdate("insert into \(table) (catid,subcat_id,id,subcat_title,title,description,lat,lon,takhfif,images,wifi,apple_health,wc,full_time,pos,work_hours,phone,mobile,fax,website,email,address,facebook,instagram,linkedin,telegram,googleplus,twitter,publish,feature,manager,city,rating_sum,rate_count,lastip,parking,isMallID,mallID,discount_images,price_images,newProduct_images,services_images,order_online,out_upon,cat_title,cat_icon,last_modify,item_logo,cat_logo,rate_sum1,rate_sum2,rate_sum3,rate_count1,rate_count2,rate_count3,rate_title1,rate_title2,rate_title3,rate_enable) values (\(catid),\(subcat_id),\(id),'\(subcat_title)','\(title)','\(description)','\(lat)','\(lon)','\(takhfif)','\(images)',\(wifi),\(apple_health),\(wc),\(full_time),\(pos),'\(work_hours)','\(phone)','\(mobile)','\(fax)','\(website)','\(email)','\(address)','\(facebook)','\(instagram)','\(linkedin)','\(telegram)','\(googleplus)','\(twitter)',\(publish),\(feature),'\(manager)','\(city)',\(rating_sum),\(rate_count),'\(lastip)',\(parking),\(isMallID),\(mallID),'\(discount_images)','\(price_images)','\(newProduct_images)','\(services_images)',\(order_online),\(out_upon),'\(cat_title)','\(cat_icon)',\(last_modify),'\(item_logo)','\(cat_logo)',\(rate_sum1),\(rate_sum2),\(rate_sum3),\(rate_count1),\(rate_count2),\(rate_count3),'\(rate_title1)','\(rate_title2)','\(rate_title3)',\(rate_enable))") {



        }
但我在建造之前得到了这个信息:

无法使用字符串类型的参数列表调用executeUpdate


您使用的api错误。第一个参数是sql,每个值都必须用“?”表示。第二个(值)是一个值数组。试试这个:

if let db = database, let q = db.executeUpdate(
    "insert into \(table) (catid,subcat_id,id,subcat_title,title,description,lat,lon,takhfif,images,wifi,apple_health,wc,full_time,pos,work_hours,phone,mobile,fax,website,email,address,facebook,instagram,linkedin,telegram,googleplus,twitter,publish,feature,manager,city,rating_sum,rate_count,lastip,parking,isMallID,mallID,discount_images,price_images,newProduct_images,services_images,order_online,out_upon,cat_title,cat_icon,last_modify,item_logo,cat_logo,rate_sum1,rate_sum2,rate_sum3,rate_count1,rate_count2,rate_count3,rate_title1,rate_title2,rate_title3,rate_enable) values (?, ?, ? ...., ?, ?, ? )"
    values: [catid, subcat_id, id, subcat_title, title, description, lat, lon, takhfif, images, wifi, apple_health, wc, full_time, pos, work_hours, phone, mobile, fax, website, email, address, facebook, instagram, linkedin, telegram, googleplus, twitter, publish, feature, manager, city, rating_sum, rate_count, lastip, parking, isMallID, mallID, discount_images, price_images, newProduct_images, services_images, order_online, out_upon, cat_title, cat_icon, last_modify, item_logo, cat_logo, rate_sum1, rate_sum2, rate_sum3, rate_count1, rate_count2, rate_count3, rate_title1, rate_title2, rate_title3, rate_enable]) {

}
注意:我没有计算值,因此您必须确保字符串中“?”的计数正好是您的值的计数

也许您应该考虑一个函数来提高代码的可读性。诸如此类:

extension FMDatabase {

    func insert(into table: String, row values: [(column: String, content: Any)]) {
        guard (values.count > 0) else { fatalError(values.count > 0, "Inserting nothing into a table makes no sense!") }
        var sql = "INSERT INTO \(table) ("
        var contents: [Any] = []
        for (index, value) in values.enumerated() {
            sql += index == 0 ? value.column : ", \(value.column)"
            contents.append(value.content)
        }
        sql += ") VALUES ("
        for index in 0..<values.count {
            sql += index == 0 ? "?" : ", ?"
        }
        sql += ")"
        executeUpdate(sql, values: contents)
    }

}
if let db = database {
    db.insert(
        into: table,
        row: [
            (column: "catid", content: catid),
            (column: "subcat_id", content: subcat_id),
            ...
            (column: "rate_enable", content: rate_enable)
        ]
    )
}

它的可读性不是更好吗?

您错误地使用了api。第一个参数是sql,每个值都必须用“?”表示。第二个(值)是一个值数组。试试这个:

if let db = database, let q = db.executeUpdate(
    "insert into \(table) (catid,subcat_id,id,subcat_title,title,description,lat,lon,takhfif,images,wifi,apple_health,wc,full_time,pos,work_hours,phone,mobile,fax,website,email,address,facebook,instagram,linkedin,telegram,googleplus,twitter,publish,feature,manager,city,rating_sum,rate_count,lastip,parking,isMallID,mallID,discount_images,price_images,newProduct_images,services_images,order_online,out_upon,cat_title,cat_icon,last_modify,item_logo,cat_logo,rate_sum1,rate_sum2,rate_sum3,rate_count1,rate_count2,rate_count3,rate_title1,rate_title2,rate_title3,rate_enable) values (?, ?, ? ...., ?, ?, ? )"
    values: [catid, subcat_id, id, subcat_title, title, description, lat, lon, takhfif, images, wifi, apple_health, wc, full_time, pos, work_hours, phone, mobile, fax, website, email, address, facebook, instagram, linkedin, telegram, googleplus, twitter, publish, feature, manager, city, rating_sum, rate_count, lastip, parking, isMallID, mallID, discount_images, price_images, newProduct_images, services_images, order_online, out_upon, cat_title, cat_icon, last_modify, item_logo, cat_logo, rate_sum1, rate_sum2, rate_sum3, rate_count1, rate_count2, rate_count3, rate_title1, rate_title2, rate_title3, rate_enable]) {

}
注意:我没有计算值,因此您必须确保字符串中“?”的计数正好是您的值的计数

也许您应该考虑一个函数来提高代码的可读性。诸如此类:

extension FMDatabase {

    func insert(into table: String, row values: [(column: String, content: Any)]) {
        guard (values.count > 0) else { fatalError(values.count > 0, "Inserting nothing into a table makes no sense!") }
        var sql = "INSERT INTO \(table) ("
        var contents: [Any] = []
        for (index, value) in values.enumerated() {
            sql += index == 0 ? value.column : ", \(value.column)"
            contents.append(value.content)
        }
        sql += ") VALUES ("
        for index in 0..<values.count {
            sql += index == 0 ? "?" : ", ?"
        }
        sql += ")"
        executeUpdate(sql, values: contents)
    }

}
if let db = database {
    db.insert(
        into: table,
        row: [
            (column: "catid", content: catid),
            (column: "subcat_id", content: subcat_id),
            ...
            (column: "rate_enable", content: rate_enable)
        ]
    )
}

它的可读性不是更好吗?

在出现错误的地方提供代码,不要使用屏幕截图,而是编写代码,这样会更容易帮助您。在出现错误的地方提供代码,不要使用屏幕截图,而是编写代码,这样会更容易帮助您。