如何在 SQLite swift 4 中删除 tableview 行 [英] How do I delete an tableview row in SQLite swift 4

查看:28
本文介绍了如何在 SQLite swift 4 中删除 tableview 行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道如何从 SQLite 数据库中删除一行.我实现了一个用于删除项目的滑动方法.我尝试了几件事,但仍然无法删除该项目.

I want to know how to delete a row from the SQLite database. I implemented a swipe method for the removal of the item. I tried several thing but still it won't remove the item.

import UIKit
import SQLite3

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

var db: OpaquePointer?
var brainList = [BrainDumpAdapter]()
var usesTallCells = false



@IBOutlet weak var tableViewHeroes: UITableView!
@IBOutlet weak var textFieldName: UITextField!
@IBOutlet weak var textFieldPowerRanking: UITextField!

@IBAction func buttonSave(_ sender: UIButton) {
    let name = textFieldName.text?.trimmingCharacters(in: .whitespacesAndNewlines)
    let powerRanking = textFieldPowerRanking.text?.trimmingCharacters(in: .whitespacesAndNewlines)

    if(name?.isEmpty)!{
        textFieldName.layer.borderColor = UIColor.red.cgColor
        return
    }

    if(powerRanking?.isEmpty)!{
        textFieldName.layer.borderColor = UIColor.red.cgColor
        return
    }

    var stmt: OpaquePointer?

    let queryString = "INSERT INTO BrainDump (name, pomodoro) VALUES (?,?)"

    if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK{
        let errmsg = String(cString: sqlite3_errmsg(db)!)
        print("error preparing insert: \(errmsg)")
        return
    }

    if sqlite3_bind_text(stmt, 1, name, -1, nil) != SQLITE_OK{
        let errmsg = String(cString: sqlite3_errmsg(db)!)
        print("failure binding name: \(errmsg)")
        return
    }

    if sqlite3_bind_int(stmt, 2, (powerRanking! as NSString).intValue) != SQLITE_OK{
        let errmsg = String(cString: sqlite3_errmsg(db)!)
        print("failure binding name: \(errmsg)")
        return
    }

    if sqlite3_step(stmt) != SQLITE_DONE {
        let errmsg = String(cString: sqlite3_errmsg(db)!)
        print("failure inserting hero: \(errmsg)")
        return
    }

    textFieldName.text=""
    textFieldPowerRanking.text=""

    readValues()

    print("Braindump succesfully saved")
}

//delete item sqlite
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == UITableViewCell.EditingStyle.delete {
        brainList.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath], with: UITableView.RowAnimation.automatic)

        self.tableViewHeroes.reloadData()

    }
}

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
    return true
}




//SQLITE
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    print(brainList.count)
    return brainList.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
    let brainDump: BrainDumpAdapter
    brainDump = brainList[indexPath.row]
    cell.textLabel?.text = brainDump.name



    return cell
}


func readValues(){
    brainList.removeAll()

    let queryString = "SELECT * FROM BrainDump"

    var stmt:OpaquePointer?

    if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK{
        let errmsg = String(cString: sqlite3_errmsg(db)!)
        print("error preparing insert: \(errmsg)")
        return
    }

    while(sqlite3_step(stmt) == SQLITE_ROW){
        let id = sqlite3_column_int(stmt, 0)
        let name = String(cString: sqlite3_column_text(stmt, 1))
        let pomodoro = sqlite3_column_int(stmt, 2)

        brainList.append(BrainDumpAdapter(id: Int(id), name: String(describing: name), pomodoro: Int(pomodoro)))
    }

    self.tableViewHeroes.reloadData()
}




override func viewDidLoad() {
    super.viewDidLoad()


    let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
        .appendingPathComponent("SQLiteDatabse.sqlite")


    if sqlite3_open(fileURL.path, &db) != SQLITE_OK {
        print("error opening database")
    }

    if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS BrainDump (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, pomodoro INTEGER)", nil, nil, nil) != SQLITE_OK {
        let errmsg = String(cString: sqlite3_errmsg(db)!)
        print("error creating table: \(errmsg)")
    }

    readValues()

}
}

推荐答案

func deleteBrainDumpItem(itemId: Int32){

func deleteBrainDumpItem(itemId: Int32){

    let deleteStatementStirng = "DELETE FROM BrainDump WHERE id = ?;"

    var deleteStatement: OpaquePointer? = nil
    if sqlite3_prepare_v2(db, deleteStatementStirng, -1, &deleteStatement, nil) == SQLITE_OK {

        sqlite3_bind_int(deleteStatement, 1, itemId)

        if sqlite3_step(deleteStatement) == SQLITE_DONE {
            print("Successfully deleted row.")
        } else {
            print("Could not delete row.")
        }
    } else {
        print("DELETE statement could not be prepared")
    }




    sqlite3_finalize(deleteStatement)


    print("delete")


}

我发现了,简单的 SQL 查询将为您完成这项工作.

I found it out, simple SQL query will do the job for you.

这篇关于如何在 SQLite swift 4 中删除 tableview 行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆