এই উদাহরণে দেখানো হয়েছে কিভাবে SQLite SELECT কোয়েরিতে স্ট্রিং কনক্যাটেনেশন (append) করে কাস্টোম আউটপুট ফরম্যাট করা যায়।
স্টেপ ১: নতুন প্রজেক্ট তৈরি
স্টেপ ২: res/layout/activity_main.xml
(স্ট্যান্ডার্ড লেআউট: নাম, স্যালারি ইনপুট, Save/Refresh/Update/Delete বাটন, ListView)
স্টেপ ৩: src/MainActivity.java
(স্ট্যান্ডার্ড MainActivity, DatabaseHelper ব্যবহার করে CRUD অপারেশন)
স্টেপ ৪: 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.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); // ভার্শন 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) { /* error handling */ }
}
@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;
}
// কী পরিবর্তন: SELECT-এ 'Salary is :' স্ট্রিং অ্যাপেন্ড
public ArrayList getAllCotacts() {
SQLiteDatabase db = this.getReadableDatabase();
ArrayList<String> array_list = new ArrayList<String>();
// || অপারেটর দিয়ে স্ট্রিং কনক্যাটেনেশন, 'Salary is :' লিটার্যাল যোগ
Cursor res = db.rawQuery(
"select (id ||' : '||name || ' : ' || 'Salary is :'|| salary || ' : '|| datetime) 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;
}
}
SQLite স্ট্রিং কনক্যাটেনেশন
- SQLite-এ
||অপারেটর ব্যবহার করে স্ট্রিং কনক্যাটেনেট করা হয়। 'Salary is :'|| salary→ "Salary is : 5000" টাইপ আউটপুট দেবে।- এটি SQL-এই ফরম্যাটিং করে, অ্যাপ লেয়ারে স্ট্রিং ম্যানিপুলেশন দরকার নেই।
রান করা
অ্যান্ড্রয়েড ডিভাইসে রান করুন। ListView-এ প্রতিটি রোতে "Salary is : <মান>" দেখাবে।
অন্যান্য উপযোগী SQLite স্ট্রিং ফাংশন
| ফাংশন | ব্যাখ্যা | উদাহরণ |
|---|---|---|
|| |
কনক্যাটেনেশন | 'Hello ' || 'World' → 'Hello World' |
substr(X, Y, Z) |
সাবস্ট্রিং | substr('Hello', 2, 3) → 'ell' |
upper(X) / lower(X) |
আপার/লোয়ার কেস | upper('hi') → 'HI' |
trim(X) |
ট্রিম স্পেস | trim(' hi ') → 'hi' |
printf('%05d', 42) |
ফরম্যাটেড আউটপুট | printf('%05d', 42) → '00042' |