কোনো অ্যাপ্লিকেশন ডিজাইন করার সময় ডেটা স্টোর করা সবচেয়ে গুরুত্বপূর্ণ বিষয়। ডেটা স্টোর করার অনেক উপায় রয়েছে, SQLite ডেটাবেস 그중 একটি।
iPhone-এ SQLite ডেটাবেস অ্যাক্সেস করার একাধিক উপায় রয়েছে। আমরা Swift-এ সবচেয়ে সহজ উপায় দেখব।
SQLite হল একটি রিলেশনাল ডেটাবেস ম্যানেজমেন্ট সিস্টেম যা C প্রোগ্রামিং লাইব্রেরিতে থাকে এবং অ্যাপ্লিকেশনে এম্বেড করা যায়।
এই টিউটোরিয়ালে আমরা একটি স্যাম্পল অ্যাপ্লিকেশন তৈরি করব যেটিতে একটি টেক্সট ফিল্ড থাকবে নাম ইনপুট নেওয়ার জন্য, আমরা নামটি SQLite ডেটাবেসে স্টোর করব এবং ইউজার শো বাটন ট্যাপ করলে সেটি প্রিন্ট করব।
চলুন শুরু করি।
Step 1 − Xcode → Single View Application → নাম দিন DBSqlite।
Step 2 − UI ডেভেলপ করুন, Main.storyboard খুলুন এবং একটি টেক্সট ফিল্ড এবং দুটি বাটন যোগ করুন।
Step 3 − দুটি বাটনের @IBAction এবং টেক্সট ফিল্ডের @IBOutlet তৈরি করুন, নাম দিন btnInsert, btnShowData এবং name।

আমরা দুটি বাটন যোগ করেছি: একটি ডেটা ইনসার্টের জন্য এবং অন্যটি ডেটা দেখানোর জন্য। একটি টেক্সট ফিল্ডও আছে যেখানে নাম লিখে ডেটাবেসে ইনসার্ট করা যাবে।
Step 4 − SQLite ফাইল তৈরি করুন এবং ডেটাবেস কানেকশন খুলুন।
ViewController.swift-এ লিখুন:
Import 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?
Step 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)")
}
Step 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 ফাইল চেক করুন নেভিগেট করে লোকেশনে।
Step 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
}
এখানে আমরা টেক্সট ফিল্ড থেকে ভ্যালু নিয়ে টেবিলে লিখছি।
Step 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" লিখে Insert ট্যাপ করুন। তারপর Show ট্যাপ করুন, Xcode-র ডিবাগার এরিয়াতে "HELLO" প্রিন্ট হয়ে থাকবে।

