كيفية الاتصال بقاعدة بيانات محلية من خلال كوتلن .

تطرقنا من قبل عن هذا الموضوع لكن بلغة جافا لهذا اول درس عن الكاتلن في الموقع سنتحدث فيه عن الاتصال بقاعدة بيانات محلية.
فكحال اي مشروع الكتروني للاتصال بقاعدة البيانات في الاندرويد لابد من تعلم لغة sql  و يعتمد الاندرويد حتى الان على sqlite  كقاعدة بيانات و من تعامل مسبقا مع php  التي تعتمد على mysqlite فستكون الامور مختلفة بعض الشيء لذا في هذا الدرس سنتطرق الى كيفية الاتصال بقاعدة البيانات داخلية في الاندرويدـ android studio اي مصحوبة مع التطبيق لان اغلب التطبيقات تعمل offline لكن هذه المرة بواسطة الكوتلن.
اول ما سنقوم به هو انشاء قاعدة بيانات من خلال برنامج db browser for sqlite  .
    New Database ⇒ Name ⇒ Save
تقوم بتنصيب البرنامج بعدها تفتح الملف الذي حملته .
لن اتعمق في كيفية انشاء الجداول على db browser لان هذا ليس موضوعنا . 

1-اضافة عمود جديد new Record
2-حفظ التغييرات
3-تطبييق التغييرات مهم جدا قد تخسر الداتا ان لم تضغط عليه
4ـ اسم الجدول.
يمكنك انشاء جدول خاص بك من خلال DataStructure
ننتقل الان الى android studio
نقوم بانشاء مجلد اسمه assets
لانشاء المجلد انقر بالزر الايمن على app بعدها New ثم Dircetory ستنبتق لك نافدة ضع الاسم assets و مبروك عليك .
app ⇒ New ⇒ Dirctory(assets).
dbfile.db


بعد ذلك ننقل ملف database الى المجلد و نضغط على الزر الايمن ثم Paste.
الان قطعت نصف الطريق
نقوم بفتح نافدة جديدة تكون هكذا تعرض الاسماء و كلمات المرور و البريد الالكتروني في قاعدة البيانات .
ملف xml
<relativelayout
 android:layout_height="match_parent" 
 android:layout_width="match_parent" 
 android:paddingbottom="@dimen/activity_vertical_margin"
 android:paddingleft="@dimen/activity_horizontal_margin"
 android:paddingright="@dimen/activity_horizontal_margin"
 android:paddingtop="@dimen/activity_vertical_margin"
 tools:context="com.learnmore.androidbella.ScrollLayout"
 xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools">
  
    <linearlayout android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:orientation="vertical"/>
  
        <textview android:id="@+id/textView2"
             android:layout_height="wrap_content"
             android:layout_width="wrap_content"
             android:text="Large Text"
             android:textappearance="?android:attr/textAppearanceLarge"/>
  
</relativelayout>
بعدها نقوم انشاء كلاس جديد
اذهب الى مجلد java واضغط على زر الفارة الايمن ثم new ⇒java class
تقوم باعطاءه اسم  dabase
ننسخ الكود التالي
class dbHelper : SQLiteOpenHelper {
    companion object {
        //متغير لتحديد اسم ملف قاعدة البيانات
        private val DB_NAME = "dbfile.db"
    }

    private var DB_PATH: String? = null
    private var db: SQLiteDatabase? = null
    private var myContext: Context

    constructor(context: Context) : super(context, DB_NAME, null, 10) {
        this.myContext = context
        // مسار قاعدة البيانات على الهاتف
        this.DB_PATH = "/data/data/" + myContext.packageName + "/databases/"
    }

    @Throws(IOException::class)
    fun copyDataBase() {
        //انشاء المسار ان لم يكن موجودا
        File(DB_PATH).mkdirs()
        //قتح قاعدة البايانات
        val myInput = myContext.assets.open(DB_NAME)
        val outFileName = DB_PATH!! + DB_NAME
        //نقل ق.ب الى المسار 
        val myOutput = FileOutputStream(outFileName)
        myInput.copyTo(myOutput)
        myOutput.flush()
        myOutput.close()
        myInput.close()

    }

    @Throws(SQLException::class)
    fun openDataBase() {
        //فتح قاعدة البيانات 
        val myPath = DB_PATH!! + DB_NAME
        db = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY)
    }

    @Synchronized override fun close() {
        //اغلاق ق.ب
        if (db != null)
            db!!.close()
        super.close()
    }


    override fun onCreate(db: android.database.sqlite.SQLiteDatabase) {}

    override fun onUpgrade(db: android.database.sqlite.SQLiteDatabase, oldVersion: Int, newVersion: Int) {
        if (newVersion > oldVersion)
            try {
                copyDataBase()
            } catch (e: IOException) {
                e.printStackTrace()
            }
    }

    //استعلام اس كيو ال
    //ضع ما يكفيك من الباراميترات
    fun query(table: String, selection: String): Cursor? {
        //الطريقة الاولى
        val data = db!!.query(table, null, selection, null, null, null, null)
        //الطريقة الثانية استعمل احدى الطريقتين
        val data =db!!.execSQL("الاستعلام الخاص بك بلغة اس كيو ال")
        if (data.count > 0) {
            return data
        } else {
            return null
        }
    }
}

اقوم بالذهاب الى الملف الذي ارغب في ارسال استعلام من خلاله
و استعمل الاكواد التالية للاتصال ب ق.ب :
//الوصول الى الكلاس الذي انشائناه
val db= dbHelper(this)
//نقل ق. ب 
db.copyDataBase()
//فتح ف.ب
db.openDataBase()
//ارسال البرميترات لتنفيد الاستعلام
val cur = db.query("your table", "where statment")
//جلب الداتا
if (cur!!.moveToFirst()) {
//تابع الشرح لتفهم
  val mdata=cur!!.getString(2)
} 
dbHelper -1 هو اسم الملف المساعد لفتح قاعدة البيانات.
2- بالنسبة لنقل ق.ب فيجب ان تكون مرة واحدة لكل تحديث .
3-  فتح ق.ب يجب ان يرافقه غلق بعد الانتهاء من جلب البيانات تفديا لوصول محتمل من خلال تطبيق اخر.
4-  المتغير الاول من الدالة يرمز للجدول الذي توجد فيه البيانات المرادة و الذي قمت بانشائه من خلال dbBrowser .
5-  اما الثاني فيرمز الى الفيلتر او تصفية البيانات .
6-  getString :ترمز الى العمود الذي ترغب في جلبه العد يبدأ من الصفر .
7-   ان كنت ترغب في استكشاف المزيد اكتب cur. ثم اضغط على كل من space و shift


هل ترغب في مثل هذه التدوينات

اسماعيل ايت بلا

ببساطة ارغب في تجربة جديدة من التعلم من خلال مشاركة ما تعلمه يجبرني ذلك على البحث لمدة طويلة مما يجعل الموقع جديرا بالثقة

اترك لنا تعليقا

الاشتراك بالقائمة البريدية

توصل باحدث مواضيعنا و كن على اطلاع باخر اخبار وتقنيات الاندرويد