میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

استفاده از SQLite در اندروید استودیو

در این بخش نحوه ی کار و استفاده از دیتابیس SQLite در اندروید استودیو را به صورت کاربردی خواهید آموخت. برای مدیریت داده ها از یک DAO ( آبجکت دسترسی به داده ها ) استفاده خواهید نمود. DAO وظیفه ی مدیریت اتصال به دیتابیس، دسترسی و ویرایش داده ها را بر عهده دارد. طی این مکانیزم همچنین آبجکت های دیتابیس به آبجکت های متعارف جاوا (Java Objects ) تبدیل می شوند و از این طریق کد UI دیگر با لایه ی ذخیره ی دائمی داده ها یا persistence layer تعامل نخواهد داشت.

در پایان اپلیکیشن به صورت زیر خواهد بود:

persistence layer

گفتنی است که استفاده از الگو DAO همیشه و در همه ی شرایط بهترین روش نیست. در واقع این الگو، model object های جاوا ( آبجکت هایی از روی جداول دیتابیس ) ایجاد می کند و منابع بیشتری مصرف می کند. استفاده ی مستقیم از یک دیتابیس یا دسترسی به داده ها از طریق یک ContentProvider معمولا بهینه تر بوده و از آنجایی که در این دو روش دیگر نیازی به ساخت آبجکت های جاوا نیست، میزان حافظه مورد استفاده کاهش می یابد.

همان طور که گفته شد در این روش از DAO استفاده می شود. برای این مثال ورژن کتابخانه های اندروید را بر روی API 15 تنظیم نمایید که معادل اندروید ۴٫۰ می باشد. در غیر این صورت می بایست از کلاس Loader برای مدیریت Cursor استفاده می شد که از اندروید ۳٫۰ به بعد پشتیبانی می شود. بعلاوه استفاده از این کلاس پیچیدگی خاص خود را دارد.


ایجاد پروژه

یک پروژه ی جدید اندروید و یک activity به ترتیب به نام های de.vogella.android.sqlite.first و  TestDatabaseActivity ایجاد نمایید

ابتدا کلاس MySQLiteHelper را ایجاد نمایید. این کلاس دیتابیس اپلیکیشن را ایجاد می کند.
اگر به خاطر داشته باشید، متد () onUpgrade به کلی داده های فعلی بانک اطلاعاتی را حذف کرده و جدول را مجددا ایجاد می کند. سپس تعدادی ثابت ( )constant جهت نگهداری مقادیر اسم جدول و ستون های جدول ایجاد می نماید.

 

package de.vogella.android.sqlite.first;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class MySQLiteHelper extends SQLiteOpenHelper {
public static final String TABLE_COMMENTS = "comments";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_COMMENT = "comment";
private static final String DATABASE_NAME = "commments.db";
private static final int DATABASE_VERSION = 1;
// Database creation sql statement
private static final String DATABASE_CREATE = "create table "
+ TABLE_COMMENTS + "( " + COLUMN_ID
+ " integer primary key autoincrement, " + COLUMN_COMMENT
+ " text not null);";
public MySQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase database) {
database.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(MySQLiteHelper.class.getName(),
"Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + TABLE_COMMENTS);
onCreate(db);
}
}

کلاس Comment را ایجاد نمایید. این کلاس به منزله ی ( model آبجکتی ساخته شده از جدول دیتابیس) خواهد بود و تمامی داده هایی که در دیتابیس ذخیره شده و برای کاربر به نمایش در می آید را دربر خواهد گرفت

 

package de.vogella.android.sqlite.first;
public class Comment {
private long id;
private String comment;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
// Will be used by the ArrayAdapter in the ListView
@Override
public String toString() {
return comment;
}
}

کلاس CommentDataSource را ایجاد نمایید. این کلاس همان آبجکتی است که برای دسترسی به دیتابیس ( )DAO از آن استفاده خواهید نمود. آبجکت ذکر شده اتصال به دیتابیس را نگه داشته و امکان درج comment های جدید و واکشی تمامی comment های جاری را برای اپلیکیشن فراهم می کند.

 

 

package de.vogella.android.sqlite.first;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
public class CommentsDataSource {
// Database fields
private SQLiteDatabase database;
private MySQLiteHelper dbHelper;
private String[] allColumns = { MySQLiteHelper.COLUMN_ID,
MySQLiteHelper.COLUMN_COMMENT };
public CommentsDataSource(Context context) {
dbHelper = new MySQLiteHelper(context);
}
public void open() throws SQLException {
database = dbHelper.getWritableDatabase();
}
public void close() {
dbHelper.close();
}
public Comment createComment(String comment) {
ContentValues values = new ContentValues();
values.put(MySQLiteHelper.COLUMN_COMMENT, comment);
long insertId = database.insert(MySQLiteHelper.TABLE_COMMENTS, null,
values);
Cursor cursor = database.query(MySQLiteHelper.TABLE_COMMENTS,
allColumns, MySQLiteHelper.COLUMN_ID + " = " + insertId, null,
null, null, null);
cursor.moveToFirst();
Comment newComment = cursorToComment(cursor);
cursor.close();
return newComment;
}
public void deleteComment(Comment comment) {
long id = comment.getId();
System.out.println("Comment deleted with id: " + id);
database.delete(MySQLiteHelper.TABLE_COMMENTS, MySQLiteHelper.COLUMN_ID
+ " = " + id, null);
}
public List<Comment> getAllComments() {
List<Comment> comments = new ArrayList<Comment>();
Cursor cursor = database.query(MySQLiteHelper.TABLE_COMMENTS,
allColumns, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Comment comment = cursorToComment(cursor);
comments.add(comment);
cursor.moveToNext();
}
// make sure to close the cursor
cursor.close();
return comments;
}
private Comment cursorToComment(Cursor cursor) {
Comment comment = new Comment();
comment.setId(cursor.getLong(0));
comment.setComment(cursor.getString(1));
return comment;
}
}

ساخت ظاهر و UI اپلیکیشن

فایل main.xml در filename class=”directory”>res/layout_ folder>  را به صورت زیر ویرایش نمایید. این layout دو دکمه برای افزودن/حذف comment ها و یک ListView ( لیست ساده) جهت نمایش comment های جاری تعریف می کند. متن comment بعدها در کلاس activity و به وسیله ی یک random generator تولید خواهد شد.

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/group"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<Button
android:id="@+id/add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add New"
android:onClick="onClick"/>
<Button
android:id="@+id/delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Delete First"
android:onClick="onClick"/>
</LinearLayout>
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>

کلاس TestDatabaseActivityرا به صورت زیر ویرایش نمایید. برای نمایش آسان لیست ساده ای از اطلاعات می توانید از یک ListActivity استفاده نمایید.

 

package de.vogella.android.sqlite.first;
import java.util.List;
import java.util.Random;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
public class TestDatabaseActivity extends ListActivity {
private CommentsDataSource datasource;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
datasource = new CommentsDataSource(this);
datasource.open();
List<Comment> values = datasource.getAllComments();
// use the SimpleCursorAdapter to show the
// elements in a ListView
ArrayAdapter<Comment> adapter = new ArrayAdapter<Comment>(this,
android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
}
// Will be called via the onClick attribute
// of the buttons in main.xml
public void onClick(View view) {
@SuppressWarnings("unchecked")
ArrayAdapter<Comment> adapter = (ArrayAdapter<Comment>) getListAdapter();
Comment comment = null;
switch (view.getId()) {
case R.id.add:
String[] comments = new String[] { "Cool", "Very nice", "Hate it" };
int nextInt = new Random().nextInt(3);
// save the new comment to the database
comment = datasource.createComment(comments[nextInt]);
adapter.add(comment);
break;
case R.id.delete:
if (getListAdapter().getCount() > 0) {
comment = (Comment) getListAdapter().getItem(0);
datasource.deleteComment(comment);
adapter.remove(comment);
}
break;
}
adapter.notifyDataSetChanged();
}
@Override
protected void onResume() {
datasource.open();
super.onResume();
}
@Override
protected void onPause() {
datasource.close();
super.onPause();
}
}

نصب و اجرای اپلیکیشن

اپلیکیشن خود را نصب نموده، دکمه های Add و Delete را کلیک نمایید. سپس اپلیکیشن را restart کرده و اطمینان حاصل نمایید که داده ها پس از راه اندازی مجدد همچنان در جای خود هستند.

 


امیدواریم آموزش استفاده از SQLite در اندروید استودیو نیز برای شما مفید واقع شده باشد و ادامه آموزش برنامه نویسی اندروید رو دنبال کنید . برای مطالعه پست‌ها بیشتر ، ما را در مدرسه کدنویسی تلگرام  و یا در تی جوان اینستاگرام دنبال کنید.

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.
ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟