اموزش sqlite در اندروید بخش پیشرفته

سلام دوستان..در اموزش های قبلی با sqlite و دیتابیس اشنا شدیم.ما sqlite را در سه بخش بررسی کردیم به اینصورت که هر وقت احتیاج به دیتابیس داشتیم کد های ان را مینوشتیم.اینکار در دیتابیس های کوچک به کار ما می اید ولی در دیتابیس های بزرگتر برای ما مشکل است که هربار کد های ان را بنویسیم که اینکار باعث زیاد شدن کد های تکراری می شود.در این اموزش ما میخواهیم کد هایمان را در کلاس های جدا تعریف کنیم و هر موقع که به ان ها احتیاج داشتیم استفاده کنیم تا تسلط بهتری به دیتابیس داشته باشیم.
خب برای اینکار ابتدا یک کلاس درست میکنیم که وظایف ان باز کردن یا ساختن و ارتقای ساختار دیتابیس ما است در اینجا نام این کلاس را MyDatabase قرار داده ایم:

public class MyDatabase extends SQLiteOpenHelper {
    private final static String DB_NAME = "database name";
    private final static int DB_VERSION = 1;
    public static final String MYTB = "mytb";
    public static final String ID = "id";
    public static final String NAME = "name";
    public static final String AGE = "age";
    public MyDatabase(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase mydb) {
        mydb.execSQL("CREATE TABLE IF NOT EXISTS "+ MYTB + " (" +
                ID + " INTEGER PRIMARY KEY, " +
                NAME + " TEXT, " +
                AGE + " numeric);");
    }
    @Override
    public void onUpgrade(SQLiteDatabase mydb,
         int oldVersion, int newVersion) {
    }
}

خب در اینجا ما سه تابع تعریف کردیم.تابع اول وظیفه ساختن یا باز کردن دیتابیس را دارد.این تابع با دریافت نام و ورژن دیتابیس در صورتی که وجود نداشته باشد تابع بعدی اجرا می شود.در این تابع یعنی onCreate ما جدولمان را همانطور که در اموزش های قبلی با ان اشنا شدیم ایجاد میکنیم.
و اما تابع اخر که وظیفه مهمی هم دارد اگر دیتابیس وجود داشت بررسی میکند که اگر ورژن ان بزرگتر از ورژن قبلی بود دیتابیس را upgrade میکند یعنی تغییرات را که در ان مینویسیم در دیتابیس ایجاد میکند.
حالا یک کلاس دیگر ایجاد میکنیم که کار های دیتابیس ما را انجام دهد همانطور که قبلا اینکار ها یعنی حذف بروز رسانی و ..را انجام میدادیم اینجا هم همینکار را میکنیم ولی بصورت تابع.پس هرجا احتیاج داشتیم از این توابع استفاده میکنیم.در اینجا نام این کلاس را DatabaseHelper قرار داده ایم:

public class DatabaseHelper {
    private SQLiteDatabase mydb;
    public DatabaseHelper(Context context){
        mydb = new MyDatabase(context).getWritableDatabase();
    }
    public void insertToTable(int id, String name, int age){
        ContentValues cv = new ContentValues();
        cv.put(MyDatabase.ID, id);
        cv.put(MyDatabase.NAME, name);
        cv.put(MyDatabase.AGE, age);
        mydb.insert(MyDatabase.MYTB, null, cv);
        mydb.close();
    }
    public void updateAge(int id, int newAge){
        ContentValues cv = new ContentValues();
        cv.put(MyDatabase.AGE, newAge);
        mydb.update(MyDatabase.MYTB, cv,
                MyDatabase.ID + " = ?",
                new String[] { String.valueOf(id) });
        mydb.close();
    }
    public TableData[] getAllTable(){
        Cursor cr = mydb.rawQuery("select * from " + MyDatabase.MYTB, null);
        TableData[] data = new TableData[cr.getCount()];
        int i = 0;
        while (cr.moveToNext()){
            data[i] = new TableData();
            data[i].id = cr.getInt(cr.getColumnIndex(MyDatabase.ID));
            data[i].name = cr.getString(cr.getColumnIndex(MyDatabase.NAME));
            data[i].age = cr.getInt(cr.getColumnIndex(MyDatabase.AGE));
        }
        cr.close();
        mydb.close();
        return data;
    }
    public class TableData{
        public int id;
        public String name;
        public int age;
    }
}

خب در اینجا یک تابع با نام کلاسمان ایجاد کردیم و دیتابیس خود با استفاده از کلاسی که قبلا تعریف کردیم باز کنیم.در اینجا سه تابع ایجاد کردیم که تابع اول برای وارد کردن اطلاعات به جدول است که با چگونگی تعریف ان قبلا اشنا شدیم.یک تابع برای بروز رسانی age ایجاد کردیم که یک نمونه است و برای بروز رسانی ستون های دیگر هم باید همینطور عمل کنید.
تابع اخر هم برای خواندن اطلاعات است که نتایج را در ارایه ای به نام TableData قرار میدهد.چون اطلاعات جدول ما زیاد است همه را در ارایه قرار می دهیم برای اینکار باید یک کلاس TableData ایجاد کنیم که ان را میبینید.
به همین راحتی کار ما به پایان می رسد و میتوانیم هر جا که بخواهیم از دیتابیسمان استفاده کنیم.به مثال زیر توجه کنید :

DatabaseHelper.TableData[] data = new DatabaseHelper(this).getAllTable();
for(int i = 0; i < data.length; i++){
    myTextView.append("name: " + data[i].name + ", age: " + data[i].age );
}

برای گرفتم اطلاعات از جدول و نمایش ان از این کد استفاده می کنیم و یا برای بروزرسانی از کد زیر:

new DatabaseHelper(MainActivity.this).updatAge(1086, 20);

برای اضافه کردن اطلاعات هم از کد زیر:

new DatabaseHelper(MainActivity.this).insertToTable(1086, "sepehr", 19);

به همین سادگی کار ما تمام می شود و در صورتی که بخواهیم با دیتابیس بزرگ کار کنیم راحت میتوانیم از این کلاس هایی که ایجاد کردیم استفاده کنیم.
امیدوارم این اموزش هم براتون مفید بوده باشه.
موفق باشید

مطالعه بیشتر