IOS
 Computer >> コンピューター >  >> プログラミング >> IOS

iPhoneでSQLiteデータベースインスタンスにアクセスするにはどうすればよいですか


データの保存は、アプリケーションを設計する際に最も重要なことの1つです。データを保存する方法はたくさんあります。そのような方法の1つがSQLiteデータベースです。

iPhoneでSQLiteデータベースにアクセスする方法は複数ありますが、Swiftで最も簡単な方法を紹介します。

SQLiteは、アプリケーションに組み込まれたCプログラミングライブラリに含まれるリレーショナルデータベース管理システムです。

このチュートリアルでは、名前を入力するためのテキストフィールドを持つ1つのサンプルアプリケーションを作成します。名前をSQLiteデータベースに保存し、ユーザーが[表示]ボタンをタップすると同じものを出力します。

それでは始めましょう

ステップ1 −Xcodeを開く-→シングルビューアプリケーション-→名前をDBSqliteにしましょう。

ステップ2 − UIを開発し、Main.storyboardを開いて、以下に示すように1つのテキストフィールドと2つのボタンを追加しましょう。

ステップ3 −ボタンの両方に@IBActionを作成し、テキストフィールドに@IBOutletを作成して、それぞれbtnInsert、btnShowData、およびnameという名前を付けます。

iPhoneでSQLiteデータベースインスタンスにアクセスするにはどうすればよいですか

そこで、データを挿入するためのボタンとデータを表示するためのボタンを2つ追加しました。また、dbに挿入する必要のある名前を入力できるテキストフィールドを1つ作成しました。

ステップ4 − SQLiteファイルを作成し、データベース接続を開きましょう。

ViewController.swiftに書き込み

SQLite3をインポートする

ViewDidLoadの下に次のコードを記述します。これにより、.sqliteファイルが作成され、作成された場所を印刷できます。名前のみを挿入するため、sqliteファイルに「user_name.sqlite」という名前を付けます。

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

次に、sqlite3_open()関数を使用してデータベースを開きます。

OpaquePointerのオブジェクトを作成します。これを運用に使用します。この変数をViewDidLoadの上にグローバルに作成します。

var db:OpaquePointer?

ステップ5 −ここでテーブルを作成しましょう。テーブルを作成するには、viewDidLoadメソッドに次のコードを記述します。

//creating table
if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)", nil, nil, nil) != SQLITE_OK {
   let errorMsg = String(cString: sqlite3_errmsg(db)!)
   print("There's error creating the table: \(errorMsg)")
}

ステップ5の後、最終的なコードは次のようになります。

import UIKit
import SQLite3
class ViewController: UIViewController {
   var db: OpaquePointer?
   @IBOutlet var name: UITextField!
   override func viewDidLoad() {
      super.viewDidLoad()
      let file_URL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
.appendingPathComponent("user_name.sqlite")
      print (file_url) //to print the path of sqlite.
      //opening the database
      if sqlite3_open(file_URL.path, &db) != SQLITE_OK {
         print("There's error in opening the database")
      }
      //create table
      if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)", nil, nil, nil) != SQLITE_OK {
         let errorMsg = String(cString: sqlite3_errmsg(db)!)
         print("There's error creating the table: \(errorMsg)")
      }
   }
   @IBAction func btnInsert(_ sender: Any) {
   }
   @IBAction func btnShowData(_ sender: Any) {
   }
}

上記のコードを実行すると、エラーは発生しません。場所に移動してsqliteファイルを確認してください。

ステップ6 −ここで、データを挿入するコードを記述します。したがって、btnInsertに以下のコードを記述します

var statement: OpaquePointer?
guard let user_name = name.text, !user_name.isEmpty else {
   return
}
let query = "INSERT INTO users (name) VALUES (?)"
if sqlite3_prepare(db, query, -1, &statement, nil) != SQLITE_OK {
   let errmsg = String(cString: sqlite3_errmsg(db)!)
   print("error preparing insert: \(errmsg)")
   return
}
if sqlite3_bind_text(statement, 1, user_name, -1, nil) != SQLITE_OK {
   let errmsg = String(cString: sqlite3_errmsg(db)!)
   print("failure binding name: \(errmsg)")
   return
}
if sqlite3_step(statement) != SQLITE_DONE {
   let errmsg = String(cString: sqlite3_errmsg(db)!)
   print("failure inserting users: \(errmsg)")
return

ここでは、テキストフィールドからテーブルに値を書き込んでいます。

ステップ7 −ここで、データを表示して、btnShowData

に次のコードを記述します。
let query = "SELECT * FROM users"
var statement:OpaquePointer?
if sqlite3_prepare(db, query, -1, &statement, nil) != SQLITE_OK {
   let errmsg = String(cString: sqlite3_errmsg(db)!)
   print("error preparing insert: \(errmsg)")
   return
}
while(sqlite3_step(statement) == SQLITE_ROW) {
   let name = String(cString: sqlite3_column_text(statement, 1))
   print(name)
}

最終的なコードは次のようになります

import UIKit
import SQLite3
class ViewController: UIViewController {
   var db: OpaquePointer?
   @IBOutlet var name: UITextField!
   override func viewDidLoad() {
      super.viewDidLoad()
      let file_URL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
      .appendingPathComponent("user_name.sqlite")
      //opening the database
      if sqlite3_open(file_URL.path, &db) != SQLITE_OK {
         print("There's error in opening the database")
      }
      //creating table
      if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)", nil, nil, nil) != SQLITE_OK {
         let errorMsg = String(cString: sqlite3_errmsg(db)!)
         print("There's error creating the table: \(errorMsg)")
      }
   }
   @IBAction func btnInsert(_ sender: Any) {
      var statement: OpaquePointer?
      guard let user_name = name.text, !user_name.isEmpty else {
         return
      }
      let query = "INSERT INTO users (name) VALUES (?)"
      if sqlite3_prepare(db, query, -1, &statement, nil) != SQLITE_OK {
         let errmsg = String(cString: sqlite3_errmsg(db)!)
         print("error preparing insert: \(errmsg)")
         return
      }
      if sqlite3_bind_text(statement, 1, user_name, -1, nil) != SQLITE_OK {
         let errmsg = String(cString: sqlite3_errmsg(db)!)
         print("failure binding name: \(errmsg)")
         return
      }
      if sqlite3_step(statement) != SQLITE_DONE {
         let errmsg = String(cString: sqlite3_errmsg(db)!)
         print("failure inserting users: \(errmsg)")
         return
      }
   }
   @IBAction func btnShowData(_ sender: Any) {
      let query = "SELECT * FROM users"
      var statement:OpaquePointer?
      if sqlite3_prepare(db, query, -1, &statement, nil) != SQLITE_OK {
         let errmsg = String(cString: sqlite3_errmsg(db)!)
         print("error preparing insert: \(errmsg)")
         return
      }
      while(sqlite3_step(statement) == SQLITE_ROW) {
         let name = String(cString: sqlite3_column_text(statement, 1))
         print(name)
      }
   }
}

次に、コードを実行して、名前HELLOを入力し、挿入をタップします。次に、[表示]をタップすると、Xcodeのデバッガー領域の出力にHELLOが出力されます。

iPhoneでSQLiteデータベースインスタンスにアクセスするにはどうすればよいですか

iPhoneでSQLiteデータベースインスタンスにアクセスするにはどうすればよいですか


  1. iPhone でフォト アルバムの名前を変更する方法

    あなたのiPhoneは写真やアルバムでいっぱいですか?以前に名前を付けたアルバムを特定するのが難しい場合があります。 iPhone ギャラリーでアルバムを作成するたびに、名前を尋ねられます。しかし、誤って間違った名前を入力して、変更したくなる場合があります。 必読:iPhone のバッテリー寿命を目に見える形で改善するためのヒントと調整 先に進む前に、カメラ ロール、スクリーンショット、人物、最近削除したもの、ライブ フォト、マイ フォト ストリーム、アニメーションなどのアルバムの名前を変更できないことを知っておく必要があります。 、セルフィー、ビデオ、場所。アプリによって作成されたもの、また

  2. iPhone で Bluetooth 名を変更する方法

    すべてのスマートフォンには、デバイス メーカーによって組み込まれた Bluetooth テクノロジが搭載されています。 Apple は Bluetooth を介したデバイス間のデータ転送を促進していませんが、それにもかかわらず、これはすべてのスマートフォンに不可欠な機能です。 Bluetooth テクノロジーを使用して、オーディオ、ビデオ、写真をスピーカーやスマート TV などの別のデバイスにストリーミングすることもできます。 Apple Watch、AirPods、スマート体重計など、親デバイスに接続するために Bluetooth を必要とする他のデバイスがあります。 多くのデバイスが