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

Android SQLite-এ last_insert_rowid() ফাংশন কীভাবে ব্যবহার করবেন?

Android SQLite-এ last_insert_rowid() ফাংশন ব্যবহার করার নির্দেশিকা

এক্সাম্পলে যাওয়ার আগে, আমাদের জানতে হবে Android-এ SQLite ডাটাবেস কী। SQLite একটি ওপেন-সোর্স SQL ডাটাবেস যা ডিভাইসে টেক্সট ফাইল আকারে ডেটা সংরক্ষণ করে। Android-এ বিল্ট-ইন SQLite ডাটাবেস ইমপ্লিমেন্টেশন থাকে। SQLite সমস্ত রিলেশনাল ডাটাবেস ফিচার সাপোর্ট করে। এই ডাটাবেস অ্যাক্সেস করতে JDBC, ODBC-এর মতো কোনো কানেকশন স্থাপন করার প্রয়োজন নেই।

এই উদাহরণে দেখানো হয়েছে Android SQLite-এ last_insert_rowid() ফাংশন কীভাবে ব্যবহার করবেন।

স্টেপ ১: নতুন প্রজেক্ট তৈরি করুন

Android Studio-তে File → New Project-এ যান এবং প্রয়োজনীয় ডিটেইল পূরণ করে একটি নতুন প্রজেক্ট তৈরি করুন।

স্টেপ ২: res/layout/activity_main.xml-এ কোড যোগ করুন

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" 
    xmlns:tools="https://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" 
    android:orientation="vertical"> 
    <EditText 
        android:id="@+id/name" 
        android:layout_width="match_parent" 
        android:hint="নাম লিখুন" 
        android:layout_height="wrap_content" /> 
    <EditText 
        android:id="@+id/salary" 
        android:layout_width="match_parent" 
        android:inputType="numberDecimal" 
        android:hint="বেতন লিখুন" 
        android:layout_height="wrap_content" /> 
    <LinearLayout 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"> 
        <Button 
            android:id="@+id/save" 
            android:text="সংরক্ষণ" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" /> 
        <Button 
            android:id="@+id/refresh" 
            android:text="রিফ্রেশ" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" /> 
        <Button 
            android:id="@+id/udate" 
            android:text="আপডেট" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" /> 
        <Button 
            android:id="@+id/Delete" 
            android:text="সব মুছুন" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" /> 
    </LinearLayout> 
    <ListView 
        android:id="@+id/listView" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"> 
    </ListView> 
</LinearLayout>

উপরের কোডে নাম এবং বেতনের জন্য দুটি EditText নেওয়া হয়েছে। Save বাটনে ক্লিক করলে ডেটা SQLite ডাটাবেসে সংরক্ষিত হবে। Refresh বাটনে ক্লিক করলে ListView-এ পরিবর্তনগুলো দেখাবে।

স্টেপ ৩: src/MainActivity.java-এ কোড যোগ করুন

package com.example.andy.myapplication; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.Toast; 
import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity { 
    Button save, refresh; 
    EditText name, salary; 
    ArrayAdapter arrayAdapter; 
    private ListView listView; 
    
    @Override 
    protected void onCreate(Bundle readdInstanceState) { 
        super.onCreate(readdInstanceState); 
        setContentView(R.layout.activity_main); 
        final DatabaseHelper helper = new DatabaseHelper(this); 
        final ArrayList array_list = helper.getAllCotacts(); 
        name = findViewById(R.id.name); 
        salary = findViewById(R.id.salary); 
        listView = findViewById(R.id.listView); 
        arrayAdapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, array_list); 
        listView.setAdapter(arrayAdapter); 
        
        findViewById(R.id.Delete).setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 
                if (helper.delete()) { 
                    Toast.makeText(MainActivity.this, "মুছে ফেলা হয়েছে", Toast.LENGTH_LONG).show(); 
                } else { 
                    Toast.makeText(MainActivity.this, "মুছে ফেলা হয়নি", Toast.LENGTH_LONG).show(); 
                } 
            } 
        }); 
        
        findViewById(R.id.udate).setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 
                if (!name.getText().toString().isEmpty() && !salary.getText().toString().isEmpty()) { 
                    if (helper.update(name.getText().toString(), salary.getText().toString())) { 
                        Toast.makeText(MainActivity.this, "আপডেট হয়েছে", Toast.LENGTH_LONG).show(); 
                    } else { 
                        Toast.makeText(MainActivity.this, "আপডেট হয়নি", Toast.LENGTH_LONG).show(); 
                    } 
                } else { 
                    name.setError("নাম লিখুন"); 
                    salary.setError("বেতন লিখুন"); 
                } 
            } 
        }); 
        
        findViewById(R.id.refresh).setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 
                array_list.clear(); 
                array_list.addAll(helper.getAllCotacts()); 
                arrayAdapter.notifyDataSetChanged(); 
                listView.invalidateViews(); 
                listView.refreshDrawableState(); 
            } 
        }); 
        
        findViewById(R.id.save).setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 
                if (!name.getText().toString().isEmpty() && !salary.getText().toString().isEmpty()) { 
                    if (helper.insert(name.getText().toString(), salary.getText().toString())) { 
                        Toast.makeText(MainActivity.this, "সংরক্ষিত হয়েছে", Toast.LENGTH_LONG).show(); 
                    } else { 
                        Toast.makeText(MainActivity.this, "সংরক্ষিত হয়নি", Toast.LENGTH_LONG).show(); 
                    } 
                } else { 
                    name.setError("নাম লিখুন"); 
                    salary.setError("বেতন লিখুন"); 
                } 
            } 
        }); 
    } 
}

স্টেপ ৪: src/DatabaseHelper.java-এ কোড যোগ করুন

package com.example.andy.myapplication; 
import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteException; 
import android.database.sqlite.SQLiteOpenHelper; 
import java.io.IOException; 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 
import java.util.ArrayList; 

class DatabaseHelper extends SQLiteOpenHelper { 
    public static final String DATABASE_NAME = "salaryDatabase9"; 
    public static final String CONTACTS_TABLE_NAME = "SalaryDetails"; 
    
    public DatabaseHelper(Context context) { 
        super(context, DATABASE_NAME, null, 2); 
    } 
    
    @Override 
    public void onCreate(SQLiteDatabase db) { 
        try { 
            db.execSQL( 
                "create table " + CONTACTS_TABLE_NAME + "(id INTEGER PRIMARY KEY, name text, salary float, datetime default current_timestamp)" 
            ); 
        } catch (SQLiteException e) { 
            try { 
                throw new IOException(e); 
            } catch (IOException e1) { 
                e1.printStackTrace(); 
            } 
        } 
    } 
    
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
        db.execSQL("DROP TABLE IF EXISTS " + CONTACTS_TABLE_NAME); 
        onCreate(db); 
    } 
    
    public boolean insert(String s, String s1) { 
        SQLiteDatabase db = this.getWritableDatabase(); 
        ContentValues contentValues = new ContentValues(); 
        contentValues.put("name", s); 
        contentValues.put("salary", s1); 
        db.replace(CONTACTS_TABLE_NAME, null, contentValues); 
        return true; 
    } 
    
    public ArrayList getAllCotacts() { 
        SQLiteDatabase db = this.getReadableDatabase(); 
        ArrayList<String> array_list = new ArrayList<String>(); 
        // এখানে last_insert_rowid() ফাংশন ব্যবহার করা হয়েছে
        Cursor res = db.rawQuery("select last_insert_rowid() as fullname from " + CONTACTS_TABLE_NAME, null); 
        res.moveToFirst(); 
        while (res.isAfterLast() == false) { 
            if ((res != null) && (res.getCount() > 0)) 
                array_list.add(res.getString(res.getColumnIndex("fullname"))); 
            res.moveToNext(); 
        } 
        return array_list; 
    } 
    
    public boolean update(String s, String s1) { 
        SQLiteDatabase db = this.getWritableDatabase(); 
        db.execSQL("UPDATE " + CONTACTS_TABLE_NAME + " SET name = " + "'" + s + "', " + "salary = " + "'" + s1 + "'"); 
        return true; 
    } 
    
    public boolean delete() { 
        SQLiteDatabase db = this.getWritableDatabase(); 
        db.execSQL("DELETE from " + CONTACTS_TABLE_NAME); 
        return true; 
    } 
}

last_insert_rowid() ফাংশন ব্যাখ্যা

SQLite-এ last_insert_rowid() ফাংশনটি বর্তমান ডাটাবেস কানেকশনে সবচেয়ে শেষে ইনসার্ট করা রোয়ের ROWID (সাধারণত PRIMARY KEY) রিটার্ন করে। এটি অটো-ইনক্রিমেন্ট PRIMARY KEY वाली টেবিলে নতুন রো ইনসার্ট করার পর সেই রোয়ের আইডি জানতে খুব কাজে লাগে। নোট: এটি কোয়েরি-তে ব্যবহার করলে প্রতিটি রোয়ের জন্য একই মান (সর্বশেষ ইনসার্ট করা রোয়ের আইডি) রিটার্ন করবে।

অ্যাপ্লিকেশন চালান

Android Studio-তে Run আইকনে ক্লিক করে অ্যাপ চালান। ডিভাইস সিলেক্ট করুন।

Android SQLite-এ last_insert_rowid() ফাংশন কীভাবে ব্যবহার করবেন?

উপরের ফলাফলে দুটি রিকর্ড সংরক্ষিত করা হয়েছে এবং এটি মান ২ রিটার্ন করছে কারণ শেষে ইনসার্ট করা রোয়ের আইডি ২।

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

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

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

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