اموزش دیتابیس در اندروید با SQLlite

منتشرشده توسط حامد قنبری در تاریخ

همانطور که می دانید پایگاه داده یا دیتابیس در اکثر زبان های برنامه نویسی ، به منظور داده پردازی در جهت ذخیره ، سازماندهی و تحلیل داده ها به کار می رود. این امکان، با در اختیار گذاشتن روشهای تعریف شده خود به برنامه نویسان کمک می کند با کاستن از پرگویی ها و اتصالات شبکه ای نابه جا، برنامه های مفید و پرثمری را تولید و روانه بازار کنند از این رو به جرات می توان گفت برنامه نویسی که از این امکان به راحتی بگذرد و یا زحمت یادگیری و بکارگیری آن را به خود ندهد دچار اشتباه بزرگی می شود.اندروید راههای مختلفی را برای ذخیره اطلاعات در نظر گرفته است که SQllite بعنوان یکی از روش ها ، بعلت وزن کم ، متن باز بودن، پشتیبانی از انواع ویژگی های رابطه پایگاه داده ، دارای امتیاز منحصر به فردی نسبت به سایر روش هاست که بصورت رشته های متنی در device کاربران ذخیره می شود.     ما در این پست نحوه بکارگیری آن را در اندروید با استفاده از پایگاه داده SQllite برای علاقمندان آموزش خواهیم داد.

پکیج اصلی کلاس SQLlite  در android.database.sqlite  قرار دارد که شامل کلاس هایی برای مدیریت پایگاه داده است.

نحوه ایجاد پایگاه داده:

به منظور ایجاد پایگاه داده کافی است با استفاده از روش openOrCreate پایگاه داده خود را با نام  و پارامترهای مشخصی ایجاد کنید . این تابع یک نمونه از کدهای مهم پایگاه داده محسوب می شود که سینتکس آن به شکل زیر می باشد.

SQLiteDatabase yourdatabase = openOrCreateDatabase("your database name",
MODE_PRIVATE,null);

نحوه جایگزینی در دیتابیس SQllite

برای این کار لازم است نخست جدولی را با نام مشخصی ایجاد کرده و سپس با تعریف نام متغیرها و نوع داده ای آنها (مانند VARCHAR)داده های مورد نظر  را داخل این جدول ها با استفاده از متد execSQl تعریف و ذخیره نماییم. که سیتکس آن به شرح زیر می باشد.

yourdatabase.execSQL("CREATE TABLE IF NOT EXISTS YourTableName(
Username VARCHAR,Password VARCHAR);");
yourdatabase.execSQL("INSERT INTO YourTableName VALUES('admin','admin');");

 

استخراج داده ها در در دیتابیس SQllite

ما می توانیم هر چیزی را از پایگاه داده با استفاده از کلاس Curose بازیابی کنیم. در این روش متدی به نام rawQuery وجود دارد که می تواند نتایج مورد نظر را از پایگاه داد استخراج کند. سینتکس آن به شرح زیر می باشد.

Cursor resultSet = yourdatabase.rawQuery("Select * from YourTableName",null);
resultSet.moveToFirst();
String username = resultSet.getString(0);
String password = resultSet.getString(1);

برای مدیریت تمام عملیات های مربوط به پایگاه داده ، یک کلاس کمکی با نام SQLiteOpenHelper  وجود دارد که می تواند بطور خودکار ایجاد و بروزرسانی پایگاه داده را مدیریت کند که سینتکس آن به شکل زیر می باشد.

public class DBHelper extends SQLiteOpenHelper {
   public DBHelper(){
      super(context,DATABASE_NAME,null,1);
   }
public void onCreate(SQLiteDatabase db) {}
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {}
}

اگر در داخل برنامه اکلیپس یا اندروید استودیو قرار دارید پروژه جدیدی را  ایجاد کنید

   اکلیپس :File ⇒ New Android ⇒ Application Project

اندروید استودیو :File ⇒ New  ⇒ New Project

اما اگر هنوز برنامه خود را باز نکرده اید یکی از برنامه های فوق را باز نموده و بعد از تعیین مشخصات(نامگذاری) ، تعیین حداقل sdk  و نوع اکتیویتی (blank  یا Empty) ، نام اکتیویتی ابتدایی و اصلی خود  را همان MainActivity قرار دهید. بعد از لود کامل برنامه ، در مسیر res ⇒layout لایه متناظر اکتیوتی اصلی یعنی activity_main را پیدا نمود و کدهای مندرج و پیش فرض آن را پاک کرده و کدهای xml  زیر را به آن اضافه کنید:

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/myLayout"
    android:stretchColumns="0"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView android:text="@string/title"
        android:layout_x="110dp"
        android:layout_y="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <TextView android:text="@string/roll_no"
        android:layout_x="30dp"
        android:layout_y="50dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <EditText android:id="@+id/editRollno"
        android:inputType="number"
        android:layout_x="150dp"
        android:layout_y="50dp"
        android:layout_width="150dp"
        android:layout_height="40dp"/>
    <TextView android:text="@string/name"
        android:layout_x="30dp"
        android:layout_y="100dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <EditText android:id="@+id/editName"
        android:inputType="text"
        android:layout_x="150dp"
        android:layout_y="100dp"
        android:layout_width="150dp"
        android:layout_height="40dp"/>
    <TextView android:text="@string/marks"
        android:layout_x="30dp"
        android:layout_y="150dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <EditText android:id="@+id/editMarks"
        android:inputType="number"
        android:layout_x="150dp"
        android:layout_y="150dp"
        android:layout_width="150dp"
        android:layout_height="40dp"/>
    <Button	  android:id="@+id/btnAdd"
        android:text="@string/add"
        android:layout_x="30dp"
        android:layout_y="200dp"
        android:layout_width="100dp"
        android:layout_height="40dp"/>
    <Button	  android:id="@+id/btnDelete"
        android:text="@string/delete"
        android:layout_x="150dp"
        android:layout_y="200dp"
        android:layout_width="100dp"
        android:layout_height="40dp"/>n
    <Button   android:id="@+id/btnModify"
        android:text="@string/modify"
        android:layout_x="30dp"
        android:layout_y="250dp"
        android:layout_width="100dp"
        android:layout_height="40dp"/>
    <Button   android:id="@+id/btnView"
        android:text="@string/view"
        android:layout_x="150dp"
        android:layout_y="250dp"
        android:layout_width="100dp"
        android:layout_height="40dp"/>
    <Button   android:id="@+id/btnViewAll"
        android:text="@string/view_all"
        android:layout_x="30dp"
        android:layout_y="300dp"
        android:layout_width="100dp"
        android:layout_height="40dp"/>
    <Button   android:id="@+id/btnShowInfo"
        android:text="@string/show_info"
        android:layout_x="150dp"
        android:layout_y="300dp"
        android:layout_width="100dp"
        android:layout_height="40dp"/>
</AbsoluteLayout>

به سراغ کلاس اصلی  یعنی MainActivity رفته و کدهای زیر را به شکل زیر به آن اضافه می کنیم.

import android.app.Activity;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity implements OnClickListener
{
    EditText editRollno,editName,editMarks;
    Button btnAdd,btnDelete,btnModify,btnView,btnViewAll,btnShowInfo;
    SQLiteDatabase db;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editRollno=(EditText)findViewById(R.id.editRollno);
        editName=(EditText)findViewById(R.id.editName);
        editMarks=(EditText)findViewById(R.id.editMarks);
        btnAdd=(Button)findViewById(R.id.btnAdd);
        btnDelete=(Button)findViewById(R.id.btnDelete);
        btnModify=(Button)findViewById(R.id.btnModify);
        btnView=(Button)findViewById(R.id.btnView);
        btnViewAll=(Button)findViewById(R.id.btnViewAll);
        btnShowInfo=(Button)findViewById(R.id.btnShowInfo);
        btnAdd.setOnClickListener(this);
        btnDelete.setOnClickListener(this);
        btnModify.setOnClickListener(this);
        btnView.setOnClickListener(this);
        btnViewAll.setOnClickListener(this);
        btnShowInfo.setOnClickListener(this);
        db=openOrCreateDatabase("StudentDB", Context.MODE_PRIVATE, null);
db.execSQL("CREATE TABLE IF NOT EXISTS student(rollno VARCHAR,name VARCHAR,marks VARCHAR);");
    }
    public void onClick(View view)
    {
        if(view==btnAdd)
        {
            if(editRollno.getText().toString().trim().length()==0||
                    editName.getText().toString().trim().length()==0||
                    editMarks.getText().toString().trim().length()==0)
            {
                showMessage("Error", "Please enter all values");
                return;
            }
 db.execSQL("INSERT INTO student VALUES('"+editRollno.getText()+"','"+editName.getText()+
                    "','"+editMarks.getText()+"');");
            showMessage("Success", "Record added");
            clearText();
        }
        if(view==btnDelete)
        {
            if(editRollno.getText().toString().trim().length()==0)
            {
                showMessage("Error", "Please enter Rollno");
                return;
            }
 Cursor c=db.rawQuery("SELECT * FROM student WHERE rollno='"+editRollno.getText()+"'", null);
            if(c.moveToFirst())
            {
db.execSQL("DELETE FROM student WHERE rollno='"+editRollno.getText()+"'");
                showMessage("Success", "Record Deleted");
            }
            else
            {
                showMessage("Error", "Invalid Rollno");
            }
            clearText();
        }
        if(view==btnModify)
        {
            if(editRollno.getText().toString().trim().length()==0)
            {
                showMessage("Error", "Please enter Rollno");
                return;
            }
Cursor c=db.rawQuery("SELECT * FROM student WHERE rollno='"+editRollno.getText()+"'", null);
            if(c.moveToFirst())
            {
db.execSQL("UPDATE student SET name='"+editName.getText()+"',marks='"+editMarks.getText()+
                        "' WHERE rollno='"+editRollno.getText()+"'");
                showMessage("Success", "Record Modified");
            }
            else
            {
                showMessage("Error", "Invalid Rollno");
            }
            clearText();
        }
        if(view==btnView)
        {
            if(editRollno.getText().toString().trim().length()==0)
            {
                showMessage("Error", "Please enter Rollno");
                return;
            }
            Cursor c=db.rawQuery("SELECT * FROM student WHERE rollno='"+editRollno.getText()+"'", null);
            if(c.moveToFirst())
            {
                editName.setText(c.getString(1));
                editMarks.setText(c.getString(2));
            }
            else
            {
                showMessage("Error", "Invalid Rollno");
                clearText();
            }
        }
        if(view==btnViewAll)
        {
            Cursor c=db.rawQuery("SELECT * FROM student", null);
            if(c.getCount()==0)
            {
                showMessage("Error", "No records found");
                return;
            }
            StringBuffer buffer=new StringBuffer();
            while(c.moveToNext())
            {
                buffer.append("Rollno: "+c.getString(0)+"\n");
                buffer.append("Name: "+c.getString(1)+"\n");
                buffer.append("Marks: "+c.getString(2)+"\n\n");
            }
            showMessage("Student Details", buffer.toString());
        }
        if(view==btnShowInfo)
        {
            showMessage("Student Management Application", "Developed By Azim");
        }
    }
    public void showMessage(String title,String message)
    {
        Builder builder=new Builder(this);
        builder.setCancelable(true);
        builder.setTitle(title);
        builder.setMessage(message);
        builder.show();
    }
    public void clearText()
    {
        editRollno.setText("");
        editName.setText("");
        editMarks.setText("");
        editRollno.requestFocus();
    }
}

در نهایت در قسمت value ، فایل string.xml را باز نموده و کدهای زیر را به شکل زیر به آن می افزاییم:

<resources>
<string name="hello">Hello World, MyApp!</string>
<string name="app_name">StudentDetailsApp</string>
<string name="title">Student Details</string>
<string name="roll_no">Enter Rollno: </string>
<string name="name">Enter Name: </string>
<string name="marks">Enter Marks: </string>
<string name="add">Add</string>
<string name="delete">Delete</string>
<string name="modify">Modify</string>
<string name="view">View</string>
<string name="view_all">View All</string>
<string name="show_info">Show Information</string>
</resources>

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

کپی برداری از محتوای سایت psrd، ممنوع بوده و پیگرد قانونی دارد. (تنها استفاده شخصی کاربران ، مجاز است) (کپی برداری توسط سایر وب سایت ها  غیرقانونی بوده و در صورت رویت به ستادسازماندهی اطلاع داده خواهد شد.

منبع اصلی مثال این مقاله :

https://www.codeproject.com/Articles/783073/A-Simple-Android-SQLite-Example

 


0 دیدگاه

دیدگاهتان را بنویسید

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

-- بارگیری کد امنیتی --