কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েড SQLite-এ ইউনিক ইন্ডেক্স তৈরি করার পদ্ধতি

ইউনিক ইন্ডেক্স কী?

ইউনিক ইন্ডেক্স (Unique Index) একটি ডেটাবেস কনস্ট্রেইন্ট যা নিশ্চিত করে যে নির্দিষ্ট কলাম(গুলো)에 কোনো ডুপ্লিকেট মান থাকে না। এটি ডেটা ইন্টিগ্রিটি বজায় রাখতে সাহায্য করে এবং কুয়েরি পারফরম্যান্স বাড়ায়।

উদাহরণ: ইমেইল কলামে ইউনিক ইন্ডেক্স

এই উদাহরণে email কলামে ইউনিক ইন্ডেক্স তৈরি করা হয়েছে যাতে একই ইমেইল দ্বিতীয়বার ইনসার্ট করা যায় না।

ধাপ ১-৩: প্রজেক্ট, লেআউট ও MainActivity

পূর্বের উদাহরণগুলির কোড ব্যবহার করুন। লেআউটে ইমেইল ফিল্ড যোগ করুন যদি ইউআই-তে দেখাতে চান।

ধাপ ৪: DatabaseHelper.java - ইউনিক ইন্ডেক্স তৈরির সাথে টেবিল

package com.example.uniqueindexdemo;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;

public class DatabaseHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME = "SalaryDatabase10";
    public static final String TABLE_NAME = "SalaryDetails";
    public static final int VERSION = 1;

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // টেবিল তৈরি
        db.execSQL("CREATE TABLE " + TABLE_NAME + 
            "(id INTEGER PRIMARY KEY AUTOINCREMENT, " +
            "name TEXT, " +
            "salary BLOB, " +
            "datetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP, " +
            "email TEXT NOT NULL)");

        // ইউনিক ইন্ডেক্স তৈরি - ইমেইল কলামে
        db.execSQL("CREATE UNIQUE INDEX idx_email ON " + TABLE_NAME + "(email)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }

    public boolean insert(String name, String salary) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("name", name);
        values.put("salary", salary.getBytes());
        values.put("email", "user" + System.currentTimeMillis() + "@example.com"); // ইউনিক ইমেইল
        try {
            return db.insertOrThrow(TABLE_NAME, null, values) != -1;
        } catch (Exception e) {
            e.printStackTrace();
            return false; // ডুপ্লিকেট ইমেইল হলে এক্সেপশন হবে
        }
    }

    public ArrayList<String> getAllContacts() {
        ArrayList<String> list = new ArrayList<>();
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.rawQuery(
            "SELECT id, name, salary, email FROM " + TABLE_NAME, null);
        
        if (cursor.moveToFirst()) {
            do {
                int id = cursor.getInt(0);
                String name = cursor.getString(1);
                byte[] blob = cursor.getBlob(2);
                String salary = new String(blob);
                String email = cursor.getString(3);
                list.add(id + " : " + name + " : " + salary + " : " + email);
            } while (cursor.moveToNext());
        }
        cursor.close();
        return list;
    }

    public boolean update(String name, String salary) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("name", name);
        values.put("salary", salary.getBytes());
        return db.update(TABLE_NAME, values, "name=?", new String[]{name}) > 0;
    }

    public boolean deleteAll() {
        SQLiteDatabase db = getWritableDatabase();
        return db.delete(TABLE_NAME, null, null) > 0;
    }
}

মূল পয়েন্টসমূহ

  • CREATE UNIQUE INDEX idx_email ON SalaryDetails(email) - ইমেইল কলামে ইউনিক ইন্ডেক্স তৈরি করে।
  • insertOrThrow() ব্যবহার করলে ডুপ্লিকেট ইমেইল ইনসার্ট করলে SQLiteConstraintException থ্রো করে।
  • ইন্ডেক্স নাম (idx_email) টেবিলের মধ্যে ইউনিক হতে হবে।

চলাচল ও ফলাফল

অ্যাপ রান করুন। একই ইমেইল দিয়ে দ্বিতীয়বার সেভ করলে এটি ব্যর্থ হবে এবং টোস্টে "NOT Inserted" দেখাবে। ListView-এ প্রতিটি রেকর্ডের সাথে ইউনিক ইমেইল দেখাবে।

অ্যান্ড্রয়েড SQLite-এ ইউনিক ইন্ডেক্স তৈরি করার পদ্ধতি

ফলাফলে প্রতিটি রেকর্ডের সাথে ইউনিক ইমেইল আইডি দেখানো হয়েছে।

  1. অ্যান্ড্রয়েড SQLite-এ time() ফাংশন ব্যবহার করার পদ্ধতি

  2. অ্যান্ড্রয়েড SQLite-এ sqlite_version() ফাংশন ব্যবহার

  3. অ্যান্ড্রয়েড SQLite-এ typeof() ফাংশন ব্যবহার করার পদ্ধতি

  4. অ্যান্ড্রয়েড SQLite-এ total_changes() ফাংশন ব্যবহার করার পদ্ধতি