sqlite的增刪改查

來源:互聯網
上載者:User

標籤:style   ...   pen   auto   open   bind   ble   lazy   int   

// 基本步驟// 1. 開啟資料庫// 2. 處理資料// 3. 關閉資料庫 
//先設定全域變數lazy var documentsPath: String = {        let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)        return paths.first!    }()    //指標    var db: OpaquePointer? = nil    var stmt: OpaquePointer? = nil
// 建立或開啟資料庫    func createOrOpenDatabase() {        print("\(NSHomeDirectory())")                //建立資料庫檔案路徑,並要改成UTF-8類型        let path: NSString = "\(documentsPath)/test.sqlite3" as NSString        let filename = path.utf8String                //判斷開啟資料庫是否成功(若沒有資料庫,會自動產生),不成功則列印輸入"create or open failed..."並關閉資料庫        if sqlite3_open(filename, &db) != SQLITE_OK {            print("create or open failed...")            sqlite3_close(db)        }    }// 建立學生表    func createTable() {        //拼接sql語句並轉為UTF-8        let string: NSString = "create table if not exists Student(id integer primary key autoincrement, sno text, name text, score integer)"        let sql = string.utf8String        //執行sql語句        if sqlite3_exec(db, sql, nil, nil, nil) != SQLITE_OK {            print("create table failed...")            sqlite3_close(db)        }    }//slq的新增操作    func insertStudent(sno: String, name: String, score: Int) {        // 準備SQL語句        let string: NSString = "insert into Student(sno, name, score) values(?, ?, ?)"        let sql = string.utf8String                // 解析SQL文本語句        //sqlite3_prepare_v2解析        //參數1:當前資料庫指標        //參數2:要解析的sql語句(預設以0結束)        //參數3:因為sql語句預設以0結束,為了出去那個0,所以是-1        //參數4:另外一個指標用於解析後儲存,最後一個參數忘了,你直接寫nil就可以了        if sqlite3_prepare_v2(db, sql, -1, &stmt, nil) != SQLITE_OK {            sqlite3_close(db)            print("\(sno), insert failed...")        }                // 綁定參數        let csno = (sno as NSString).utf8String        let cname = (name as NSString).utf8String                sqlite3_bind_text(stmt, 1, csno, -1, nil)        sqlite3_bind_text(stmt, 2, cname, -1, nil)        sqlite3_bind_int(stmt, 3, Int32(score))                // 執行SQL語句        if sqlite3_step(stmt) == SQLITE_ERROR {            sqlite3_close(db)            print("\(sno), insert failed...")        } else {            // 釋放資源            sqlite3_finalize(stmt)        }    }// 修改學生資料    func updateStudent() {        // 準備SQL語句        let string: NSString = "update Student set score = 100 where name like ‘a%‘"        let sql = string.utf8String                // 執行SQL語句        //sqlite3_exec後面的三個參數可以不用關,就寫nil就可以了        if sqlite3_exec(db, sql, nil, nil, nil) != SQLITE_OK {            sqlite3_close(db)            print("update failed...")        }    }        // 刪除學生資料    func deleteStudents() {        // 準備SQL語句        let string: NSString = "delete from Student where score < 60"        let sql = string.utf8String                // 執行SQL語句        if sqlite3_exec(db, sql, nil, nil, nil) != SQLITE_OK {            sqlite3_close(db)            print("delete failed...")        }    }
總結:增刪改(如果沒有參數,則第2,3步都不用寫)1:準備sql語句如:let string: NSString = "insert into Student(sno, name, score) values(?, ?, ?)"2:解析sql語句 如:sqlite3_prepare_v2(db, sql, -1, &stmt, nil)3:綁定參數如:let csno = (sno as NSString).utf8Stringsqlite3_bind_text(stmt, 1, csno, -1, nil)4執行語句 如:sqlite3_step(stmt)5:釋放資源 如:sqlite3_finalize(stmt)  查詢1:準備sql語句2:解析sql語句3: 執行SQL語句擷取每條記錄的資料(某些字元類型還要轉換才能顯示你要的結果)sqlite3_column_text(stmt, 0)4:釋放資源

sqlite的增刪改查

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.