كيفية الاتصال بقاعدة بيانات محلية من خلال كوتلن .
18 August
تطرقنا من قبل عن هذا الموضوع لكن بلغة جافا لهذا اول درس عن الكاتلن في الموقع سنتحدث فيه عن الاتصال بقاعدة بيانات محلية.
فكحال اي مشروع الكتروني للاتصال بقاعدة البيانات في الاندرويد لابد من تعلم لغة sql و يعتمد الاندرويد حتى الان على sqlite كقاعدة بيانات و من تعامل مسبقا مع php التي تعتمد على mysqlite فستكون الامور مختلفة بعض الشيء لذا في هذا الدرس سنتطرق الى كيفية الاتصال بقاعدة البيانات داخلية في الاندرويدـ android studio اي مصحوبة مع التطبيق لان اغلب التطبيقات تعمل offline لكن هذه المرة بواسطة الكوتلن.
فكحال اي مشروع الكتروني للاتصال بقاعدة البيانات في الاندرويد لابد من تعلم لغة sql و يعتمد الاندرويد حتى الان على sqlite كقاعدة بيانات و من تعامل مسبقا مع php التي تعتمد على mysqlite فستكون الامور مختلفة بعض الشيء لذا في هذا الدرس سنتطرق الى كيفية الاتصال بقاعدة البيانات داخلية في الاندرويدـ android studio اي مصحوبة مع التطبيق لان اغلب التطبيقات تعمل offline لكن هذه المرة بواسطة الكوتلن.
اول ما سنقوم به هو انشاء قاعدة بيانات من خلال برنامج db browser for sqlite .
لن اتعمق في كيفية انشاء الجداول على db browser لان هذا ليس موضوعنا .
New Database ⇒ Name ⇒ Save
تقوم بتنصيب البرنامج بعدها تفتح الملف الذي حملته .لن اتعمق في كيفية انشاء الجداول على db browser لان هذا ليس موضوعنا .
1-اضافة عمود جديد new Record
2-حفظ التغييرات
3-تطبييق التغييرات مهم جدا قد تخسر الداتا ان لم تضغط عليه
3-تطبييق التغييرات مهم جدا قد تخسر الداتا ان لم تضغط عليه
4ـ اسم الجدول.
يمكنك انشاء جدول خاص بك من خلال DataStructure
ننتقل الان الى android studio
نقوم بانشاء مجلد اسمه assets
بعد ذلك ننقل ملف database الى المجلد و نضغط على الزر الايمن ثم Paste.
الان قطعت نصف الطريق
نقوم بفتح نافدة جديدة تكون هكذا تعرض الاسماء و كلمات المرور و البريد الالكتروني في قاعدة البيانات .
ملف xml
يمكنك انشاء جدول خاص بك من خلال DataStructure
ننتقل الان الى android studio
نقوم بانشاء مجلد اسمه assets
لانشاء المجلد انقر بالزر الايمن على app بعدها New ثم Dircetory ستنبتق لك نافدة ضع الاسم assets و مبروك عليك .
app ⇒ New ⇒ Dirctory(assets).
بعد ذلك ننقل ملف 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
4- المتغير الاول من الدالة يرمز للجدول الذي توجد فيه البيانات المرادة و الذي قمت بانشائه من خلال dbBrowser .
5- اما الثاني فيرمز الى الفيلتر او تصفية البيانات .
6- getString :ترمز الى العمود الذي ترغب في جلبه العد يبدأ من الصفر .
7- ان كنت ترغب في استكشاف المزيد اكتب cur. ثم اضغط على كل من space و shift
اترك لنا تعليقا