SQLiteでCREATE TABLEとCRUD

2020/09/28確認

 

HeroDatabase.sqliteを作成

Herosテーブルを作成、列は、idとnameとpewerrank

import UIKit

import SQLite3

 

class ViewController: UIViewController {

  var db: OpaquePointer?

  

  override func viewDidLoad() {

    super.viewDidLoad()

 

    let fileUrl = try!

      FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("HeroDatabase.sqlite")

    

    if sqlite3_open(fileUrl.path, &db) != SQLITE_OK{

      print("Error opening database. HeroDatabase.sqlite")

      return

    }

    

    let createTableQuery = "create table if not exists Heros (id integer primary key autoincrement, name text, powerrank integer)"

    

    if sqlite3_exec(db, createTableQuery, nil, nil, nil) !=

      SQLITE_OK{

      print("Error createing table Heros")

      return

    }

    

    print("Everything is fine!")

    

  }

 

}

 

insertのfuncを追加

  func insert() {

    //creating a statement

    var stmt: OpaquePointer?

    //the insert query

    let queryString = "INSERT INTO Heroes (name, powerrank) VALUES (1,?)"

    //preparing the query

    if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK{

      let errmsg = String(cString: sqlite3_errmsg(db)!)

      print("error preparing insert: \(errmsg)")

      return

    }

    //binding the parameters 1つ目の?に2をセット

    if sqlite3_bind_text(stmt, 1, "2", -1, nil) != SQLITE_OK{

      let errmsg = String(cString: sqlite3_errmsg(db)!)

      print("failure binding: \(errmsg)")

      return

    }

    //executing the query to insert values

    if sqlite3_step(stmt) != SQLITE_DONE {

      let errmsg = String(cString: sqlite3_errmsg(db)!)

      print("failure inserting hero: \(errmsg)")

      return

    }

    print ("finish insert!")

  }

 

selectのfuncを追加

  func select() {

    //this is our select query

    let queryString = "SELECT * FROM Heroes"

    //statement pointer

    var stmt:OpaquePointer?

    //preparing the query

    if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK{

      let errmsg = String(cString: sqlite3_errmsg(db)!)

      print("error preparing insert: \(errmsg)")

      return

    }

    //traversing through all the records

    while(sqlite3_step(stmt) == SQLITE_ROW){

      //let id = sqlite3_column_int(stmt, 0)

      let name = String(cString: sqlite3_column_text(stmt, 1))

      let powerrank = sqlite3_column_int(stmt, 2)

      print("name:" + name + ", powerrank:" + String(powerrank))

      //adding values to list

      //        heroList.append(Hero(id: Int(id), name: String(describing: name), powerRanking: Int(powerrank)))

    }

    print ("finish select!")

  }

 

updateのfuncを追加

  func update() {

    //creating a statement

    var stmt: OpaquePointer?

    //the insert query

    let queryString = "UPDATE Heroes SET powerrank = ?"

    //preparing the query

    if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK{

      let errmsg = String(cString: sqlite3_errmsg(db)!)

      print("error preparing update: \(errmsg)")

      return

    }

    //binding the parameters 1つ目の?に3をセット

    if sqlite3_bind_text(stmt, 1, "3", -1, nil) != SQLITE_OK{

      let errmsg = String(cString: sqlite3_errmsg(db)!)

      print("failure binding: \(errmsg)")

      return

    }

    //executing the query to insert values

    if sqlite3_step(stmt) != SQLITE_DONE {

      let errmsg = String(cString: sqlite3_errmsg(db)!)

      print("failure updating hero: \(errmsg)")

      return

    }

    print ("finish update!")

  }

 

deleteのfuncを追加

  func delete() {

    //creating a statement

    var stmt: OpaquePointer?

    //the insert query

    let queryString = "DELETE FROM  Heroes WHERE name = ?"

    //preparing the query

    if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK{

      let errmsg = String(cString: sqlite3_errmsg(db)!)

      print("error preparing delte: \(errmsg)")

      return

    }

    //binding the parameters 1つ目の?に1をセット

    if sqlite3_bind_text(stmt, 1, "1", -1, nil) != SQLITE_OK{

      let errmsg = String(cString: sqlite3_errmsg(db)!)

      print("failure binding: \(errmsg)")

      return

    }

    //executing the query to insert values

    if sqlite3_step(stmt) != SQLITE_DONE {

      let errmsg = String(cString: sqlite3_errmsg(db)!)

      print("failure deleting hero: \(errmsg)")

      return

    }

    print ("finish delete!")

  }

 

実行

  override func viewDidLoad() {

    super.viewDidLoad()

    // Do any additional setup after loading the view.

    let fileUrl = try!

      FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("HeroDatabase.sqlite")

    

    if sqlite3_open(fileUrl.path, &db) != SQLITE_OK{

      print("Error opening database. HeroDatabase.sqlite")

      return

    }

    

    let createTableQuery = "create table if not exists Heros (id integer primary key autoincrement, name text, powerrank integer)"

    

    if sqlite3_exec(db, createTableQuery, nil, nil, nil) !=

        SQLITE_OK{

      print("Error createing table Heros")

      return

    }

    

    print("Everything is fine!")

    

    insert()

    update()

    select()

    delete()

    select()

  }

 

f:id:fedora9:20200928181223p:plain

 

Swift SQLite Tutorial for Beginners - Using SQLite in iOS Application

 

SQLite With Swift Tutorial: Getting Started | raywenderlich.com

 

SQLite DELETE Statement Step By Step with Examples