অ্যান্ড্রয়েড ইন্টারমিডিয়েট টিউটোরিয়াল ১২ঃ SQLite ডাটাবেজ

কেমন আছেন ফ্রান্স? 😛 টুলবার , ন্যাভিগেশন ড্রয়ার ঠিক মত কাজ করছে তো? আজকে আমরা চলে যাবো ডাটাবেজে। ডাটাবেজের এই টিউটোরিয়াল করার জন্য আমাদের প্রি-রিকুয়েজিট হচ্ছেঃ
– SQLite সম্পর্কে জানা
–  SQL ( Structured Query Language ) এর কুয়েরী লাইনগুলো জানা

সো, যাদের জানা নাই তারা প্রথমে এগুলো নিয়ে একটু পড়াশুনা করে আসি। ডাটাবেজ টিউটোরিয়াল এর জন্য অনেক্কেই বসিয়ে রেখেছি। আজকে সেই বহুল প্রতিক্ষিত দিন 😛

এসকিউএল এ মূলত আমরা চারটা জিনিস করি। এগুলোকে সংক্ষেপে বলে CRUD. ( ক্রুড ) । দি ক্রুডস মুভিটা দেখসেন? না, ওই মুভির সাথে এটা সম্পর্ক নেই, বাট মুভিটা ভালো।

C – Create
R – Read
U – Update
D – Delete

এই চারটা অপারেশন মূলত করবো আমরা। ডাটাবেজ ও টেবিল ক্রিয়েট করবো, রিড করবো, উপডেট করবো, ডিলিট করবো। এগুলো আপনার সারাজীবন লাগবে।

 

কি করবো আমরা?
আমরা ডাটা এড করবো, এবং তা দেখবো। আমি প্রজেক্ট অলরেডি বানিয়ে ফেলেছি, ভিডিওটা দেখি।


< সোর্সকোড ডাউনলোড করুন এখান থেকে >

কি কি লাগবে আমাদের?
১/ ডাটাবেজ হেল্পার ক্লাসঃ যেখানে ডাটাবেজের নাম, টেবিলের নাম, টেবিলের কলামের নাম, কুয়েরী ইত্যাদি থাকবে।
২/ টেমপ্লেট ক্লাসঃ এখানে কলাম অনুসারে টেবিলের ভেরিয়েবল, আর ভেরিয়েবল গুলো দিয়ে গেটার সেটার মেথড তৈরী করা হবে। গেটার সেটার সম্পর্কে আইডিয়া না থাকলে এখানে ঢু মারুন। এখানে কনস্ট্রাক্টর থাকবে বেশ কয়েকটি। দরকার মত আমরা টেনে নিয়ে ব্যবহার করবো।
৩/ মেইনএক্টিভিটি’তে ডাটাবেজ ক্লাসের অব্জেক্ট তৈরী করে ডাটা ইনসার্ট করবো এবং বের করে রিড করবো।

 

ডাটাবেজ কিভাবে ডিজাইন করবো?
ডাটাবেজ ডিজাইনটা করতে করতে হবে আস্তে আস্তে। যারা কম্পিউটার সায়েন্সে পড়ছেন তাদের জন্য ডাটাবেজ কোর্স রয়েছে আলাদা, ল্যাব রয়েছে। আর গুগল করে পাবেন অজস্র রিসোর্স। So? What are you waiting for?

 

স্টেপ ১/
প্রথমে একটা ক্লাস বানাই MyDataBaseHelper নামে যেটা কিনা extends করবে SQLiteOpenHelper কে।  সো, পুরা ক্লাসটা দেখতে এমন হবে। আমি ভেতরে বাংলায় কমেন্ট করে দিচ্ছি। বুঝতে অসুবিধা হলে কমেন্ট করবেন আর্টিকেলের নিচে।

MyDataBaseHelper.java

public class MyDataBaseHelper extends SQLiteOpenHelper {

// ডাটাবেজ ভার্শন

private static final int DATABASE_VERSION = 1;

//ডাটাবেজের নাম। একটা ডাটাবেজে অনেকগুলো টেবিল থাকতে পারে

private static final String DATABASE_NAME = "MyCSEGuidDB";

// টেবিলের নাম, যেখানে ডাটা থাকবে

private static final String TABLE_CSEDIC = "mycsetable";

// টেবিলে কি কি কলাম থাকবে।

private static final String KEY_ID = "id";

private static final String KEY_TOPIC = "topic";

private static final String KEY_DETAILS = "details";
// কনস্ট্রাক্টর

public MyDataBaseHelper(Context context) {

super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

// SQLiteOpenHelper এক্সটেন্ডস করলে এই মেথড ওভাররাইড হবে। এখানে টেবিল বানানোর এসকিউএল কুয়েরি লিখতে হবে।
@Override
public void onCreate(SQLiteDatabase db) {
// টেবিল ক্রিয়েটের কুয়েরী
 String creating_table = "CREATE TABLE " + TABLE_CSEDIC + "("
 + KEY_ID + " INTEGER PRIMARY KEY," + KEY_TOPIC + " TEXT,"

 + KEY_DETAILS + " TEXT" + “)”;

// নিচের মেথডে কল হলে টেবিল ক্রিয়েট হয়ে যাবে।

db.execSQL(creating_table);

}
// এটা কাজে আসবে যদি আমরা ডাটাবেজ আপডেট করতে চাই।

@Override

public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int j) {

// টেবিল ডিলিট করতে দিতে

sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_CSEDIC);

// আবার টেবিল তৈরী করতে

onCreate(sqLiteDatabase);

}

// নতুন ডাটা অ্যাড করতে

void addNewCseTopic(CSEGuide cseGuide) {

// ডাটা রাইট করবো তাই গেটরাইটেবল, যদি শুধু রিড করতাম, তাহলে রিডেবল দিতাম ভাইলোগ।

SQLiteDatabase db = this.getWritableDatabase();

//&nbsp; This class is used to store a set of values that the ContentResolver can process.

ContentValues values = new ContentValues();

values.put(KEY_TOPIC, cseGuide.getTopic()); //&nbsp; topic

values.put(KEY_DETAILS, cseGuide.getDetails()); // details

// ভ্যালুস এ ইউজার কর্তিক প্রবেশকৃত ডাটা এখানে টেবিলে প্রবেশ করাচ্ছি

db.insert(TABLE_CSEDIC, null, values);

db.close();

// ডাটাবেজ কানেশকন বন্ধ করে দিলাম

}


//টপিকটা ডাটাবেজ থেকে রিড করার জন্য মেথড

public String[] getTopics(){

SQLiteDatabase db = this.getReadableDatabase();

Cursor res = db.rawQuery("select * from "+TABLE_CSEDIC+";", null);

res.moveToFirst();

String[] p = new String[res.getCount()];

if(res.moveToFirst()) {

int i=0;

do {

p[i] = res.getString(res.getColumnIndex("topic"));

i = i +1;

} while(res.moveToNext());

}

return p;

}

 

এখানে Cursor হচ্ছে ডাটাবেজ এর টেবল থেকে আসা ডাটা ধরবে। এ্যারে স্ট্রিং p তে টপিকওয়ালা যা ডাটা আছে তা রাখবো এবং getTopics কল হলে সেগুলো রিটার্ন করে দিবো।
res.getString(res.getColumnIndex(“topic”)); এখানে res.getString() এর ভেতরে কলামের নামটা দিলাম যে কলামের ডাটা চাই। সো, ডিটেলইস এর ডাটা আনতে পারবেন না? পারা উচিত।
res.moveToNext() প্রতি লুপে এক রো করে নিচে যায়।
res.getCount() হচ্ছে, মোট কতগুলো আইটেম আছে তা রিটার্ন করে।

 

স্টেপ ২/
CSEGuide নামে আমরা একটা ক্লাস বানাই। যেটা দেখতে নিচের মত হবে।

public class CSEGuide {

//private variables

int _id;

String _topic;

String _detals;

// Empty constructor
public CSEGuide(){}

// constructor

public CSEGuide(int id, String topic, String details){

this._id = id;

this._topic = topic;

this._detals = details;

}

// constructor

public CSEGuide(String topic, String details){

this._topic = topic;

this._detals = details;

}



// getting ID

public int getID(){

return this._id;

}



// setting id

public void setID(int id){

this._id = id;

}



// getting topic

public String getTopic(){

return this._topic;

}



// setting topic



public void setTopic(String name){

this._topic = name;

}



// getting details

public String getDetails(){

return this._detals;

}



// setting details

public void setDetails(String details){

this._detals = details;

}

}

 

 

স্টেপ ৩/

 

ডাটা ইনসার্ট করানোর জন্য এক্সএমএল ফাইল। ইউজার এর কাছ থেকে EditText দিয়ে ডাটা নিলাম। সো, আমার activity_main.xml টা দেখতে এমন হবেঃ


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_margin="20dp">


    <EditText
        android:id="@+id/topicxml"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter Topic Name"
         />

    <EditText
        android:id="@+id/detailsxml"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter Topic Details"
        android:layout_marginTop="5dp"/>


    <Button
        android:id="@+id/addingdata"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Add to Database"
        android:onClick="oYe"
        android:layout_marginTop="15dp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="10dp">
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="Seach Topic Wise"/>
    <Button
        android:id="@+id/searchdata"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:text="Go"
        android:padding="8dp"
         />

    </LinearLayout>

    <ListView
        android:id="@+id/listfromxml"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="5dp"></ListView>

</LinearLayout>


স্টেপ ৪/
MainActivity.java তে আমরা লিস্টভিউ’তে অ্যাড করা ডাটা দেখাবো। ক্লাসটা দেখতে এমন হবেঃ


public class MainActivity extends AppCompatActivity {

ListView lv;

EditText ed_topic, ed_details;

String [] x;



@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

lv = (ListView) findViewById(R.id.listfromxml);

ed_topic = (EditText) findViewById(R.id.topicxml);

ed_details = (EditText) findViewById(R.id.detailsxml);
// অবজেক্ট ক্রিয়েট করে টপিক্সগুলোর জন্য মেথড কল করে টপিক্সগুলো এনে x এ রাখলাম।
final MyDataBaseHelper mydbh = new MyDataBaseHelper(this);

x = mydbh.getTopics();

// লিস্টভিউতে টপিকগুলো দেখালাম। লিস্টভিউ না বুঝলে লিস্টভিউ টিউটোরিয়াল দেখুন <a href="https://www.youtube.com/user/rubel007cse" target="_blank">youtube.com/rube007cse</a> এখানে

ArrayAdapter ad = new ArrayAdapter(this, android.R.layout.simple_list_item_1, x);

lv.setAdapter(ad);

}



// ডাটা এড করার জন্য মেথড। অনক্লিক লিসেনার না বুঝলে লিস্টভিউ টিউটোরিয়াল দেখুন <a href="https://www.youtube.com/user/rubel007cse" target="_blank">youtube.com/rube007cse</a> এখানে।

public void oYe (View v) {

MyDataBaseHelper mydbh = new MyDataBaseHelper(this);

mydbh.addNewCseTopic(new CSEGuide(ed_topic.getText().toString(), ed_details.getText().toString()));

Toast.makeText(getApplicationContext(),"Added", Toast.LENGTH_LONG).show();

}

}

 

sqlite database tutorial androidlime

 

 

আরো দুইটা কাজ বাকি আছে, আপডেট, ডিলিট। ওইগুলো আপনাদের জন্য রেখে দিলাম। করে জানালে খুশি হব। এই টিউটোরিয়াল ভালো লাগলে শেয়ার করতে পারেন। ছড়িয়ে দিন যা কিছু ভালো। youtube.com/rube007cse এখানে সাবস্ক্রাইব করুন ভিডিওর জন্য। রেগুলার টিউটোরিয়াল পেতে ফেসবুকে আমার সাথে যুক্ত থাকতে পারেন এখান থেকে।

ভালো থাকেন, সুস্থ থাকেন, ভালো অ্যাপ তৈরী করুন।

Mosharrof Rubel

আমাকে ফেসবুকে পাবেন এখানেঃ মোশাররফ রুবেল

You may also like...

Leave a Reply