আমরা যখন কোনো অ্যাপ্লিকেশন ডিজাইন করি তখন ডেটা সংরক্ষণ করা সবচেয়ে গুরুত্বপূর্ণ বিষয়গুলির মধ্যে একটি। ডেটা সঞ্চয় করার অনেক উপায় রয়েছে যেমন একটি উপায় হল SQLite ডেটাবেস।
আইফোনে SQLite ডাটাবেস অ্যাক্সেস করার একাধিক উপায় রয়েছে, আমরা সুইফটে এটি করার সবচেয়ে সহজ উপায় দেখব৷
SQLite হল একটি রিলেশনাল ডাটাবেস ম্যানেজমেন্ট সিস্টেম যা সি প্রোগ্রামিং লাইব্রেরিতে একটি অ্যাপ্লিকেশন এম্বেড করা আছে।
এই টিউটোরিয়ালে আমরা একটি নমুনা অ্যাপ্লিকেশন তৈরি করব যার নাম লেখার জন্য একটি পাঠ্য ক্ষেত্র থাকবে, আমরা আমাদের SQLite ডাটাবেসে নামটি সংরক্ষণ করব এবং ব্যবহারকারী যখন বোতামটি প্রদর্শন করবে তখন একই প্রিন্ট করব।
তো চলুন শুরু করি
ধাপ 1 − Xcode খুলুন -→ সিঙ্গেল ভিউ অ্যাপ্লিকেশন -→ আসুন নাম DBSqlite।
ধাপ 2 − আসুন আমাদের UI ডেভেলপ করি, Main.storyboard খুলুন এবং নীচে দেখানো হিসাবে একটি পাঠ্য ক্ষেত্র এবং দুটি বোতাম যুক্ত করুন৷
ধাপ 3 − টেক্সট ফিল্ডের জন্য বোতাম এবং @IBOutlet উভয়ের জন্য @IBAction তৈরি করুন এবং তাদের যথাক্রমে btnInsert, btnShowData এবং নাম দিন।
তাই আমরা দুটি বোতাম যুক্ত করেছি একটি ডেটা সন্নিবেশ করার জন্য এবং অন্যটি এটি প্রদর্শনের জন্য। আমরা একটি পাঠ্য ক্ষেত্রও তৈরি করেছি যেখানে আমরা নাম লিখতে পারি যা db-তে সন্নিবেশ করতে হবে।
পদক্ষেপ 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:অস্পষ্ট পয়েন্টার?
ধাপ 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 প্রিন্ট করা দেখতে পাবেন।