Database Inspector في Android Studio هو أداة مدمجة لعرض وتصحيح أخطاء قواعد بيانات SQLite لتطبيق الجوال في الوقت الفعلي. وفقاً للوثائق الرسمية لـ Android Developers (2025)، تتيح الأداة تنفيذ استعلامات SQL على قاعدة البيانات النشطة، وعرض هيكل الجداول وتحرير السجلات دون إيقاف التطبيق. الأداة تدعم Room و SQLiteOpenHelper وأي قواعد بيانات داخل التطبيق، وتكتشفها تلقائياً عند بدء التنميط.
النقاط الرئيسية
Database Inspector هو أداة من Android Studio لفحص وتصحيح أخطاء قواعد البيانات المحلية في تطبيق الجوال. يتيح عرض جميع قواعد بيانات SQLite التي أنشأها التطبيق، بما في ذلك قواعد Room و SQLiteOpenHelper والمكتبات الخارجية. الأداة متاحة بدءاً من Android Studio 4.1 ويمكن تشغيلها عبر Android Profiler أو مباشرة من قائمة View.
الغرض الرئيسي من Database Inspector هو تصور البيانات أثناء التطوير. بدلاً من إخراج محتويات قاعدة البيانات إلى سجل أو كتابة شاشة منفصلة لعرض البيانات، يمكن للمطور فتح Database Inspector ورؤية جميع الجداول وهيكلها ومحتوياتها فوراً. الأداة تدعم كلاً من قواعد بيانات SQLite العلائقية و Room مع الترحيل التلقائي.
الأداة لا غنى عنها في السيناريوهات التي تحتاج فيها إلى التحقق من صحة تخزين البيانات بعد إجراء عملية: تسجيل المستخدم، المزامنة مع الخادم، تخزين القوائم مؤقتاً. بدلاً من كتابة واجهة اختبار، يتم عرض نسخة قاعدة البيانات عبر Database Inspector. كما تُستخدم الأداة بنشاط لتصحيح أخطاء ترحيل Room — يمكنك رؤية هيكل الجدول الفعلي بعد كل تحديث للهيكل.
Database Inspector يتصل بعملية تطبيق Android عبر Android Profiler Service. يكتشف جميع اتصالات SQLite المفتوحة في التطبيق ويعرضها في اللوحة الجانبية. يلزم وجود إصدار Debug من التطبيق مع API Level 26 (Android 8.0) فأعلى.
عند التشغيل، يقوم Database Inspector بإنشاء نفق ADB بين التطبيق على الجهاز و IDE على الكمبيوتر. يتم بث ملفات قاعدة بيانات SQLite WAL (Write-Ahead Logging) عبر هذا النفق لعرض المحتويات. تُرسل أوامر SQL مباشرة إلى محرك SQLite الخاص بالتطبيق عبر دعم Database Inspector في Room و SQLiteDatabase. تكتشف الأداة تلقائياً عندما يفتح التطبيق قاعدة بيانات وتضيفها إلى القائمة التي يتم فحصها.
لكي يعمل Database Inspector بشكل صحيح، تحتاج إلى: Android Studio 4.1+، جهاز أو محاكٍ بـ API Level 26+، وإصدار Debug من التطبيق. بالنسبة لـ Room، يلزم أيضاً مكتبة room-runtime الإصدار 2.2+. إذا تم إنشاء قاعدة البيانات بوضع WAL، وهو المعيار لـ Room 2.2+، يمكن للأداة قراءة البيانات دون حظر التطبيق الرئيسي.
// مثال لقاعدة بيانات Room مدعومة من Database Inspector
@Database(
entities = [User::class, Order::class],
version = 2,
autoMigrations = [AutoMigration(from = 1, to = 2)]
)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
abstract fun orderDao(): OrderDao
}
يوفر Database Inspector مجموعة كاملة من الوظائف للعمل مع البيانات المحلية: من عرض هيكل الجداول إلى تنفيذ استعلامات SQL المعقدة وتحرير السجلات.
تعرض اللوحة اليسرى جميع قواعد البيانات والجداول. عند تحديد جدول، يتم عرض محتوياته في شبكة مع أعمدة: تظهر جميع حقول السجل كأعمدة، كل صف هو سجل منفصل. يُعرض هيكل الجدول (الاسم، النوع، القيود) في الأعلى. للمفاتيح الخارجية، تظهر العلاقات بين الجداول.
| نوع البيانات | نوع SQLite | نوع Room | مثال |
|---|---|---|---|
| عدد صحيح | INTEGER | Int, Long | 42 |
| نص | TEXT | String | "John" |
| عدد عشري | REAL | Double, Float | 3.14 |
| بيانات ثنائية | BLOB | ByteArray | [0x00, 0x01] |
| تاريخ/وقت | INTEGER (Unix epoch) | Long, Date | 1720000000 |
علامة التبويب Query تتيح تنفيذ أوامر SQL عشوائية مباشرة على قاعدة البيانات المحددة. يتم دعم SELECT و INSERT و UPDATE و DELETE و CREATE INDEX و JOIN وأي مشغلات SQLite أخرى. تُعرض النتائج بتنسيق جدولي أسفل محرر الاستعلامات. يُحتفظ بسجل الاستعلامات خلال الجلسة.
يمكن تحرير خلايا الجدول مباشرة — فقط انقر على قيمة وأدخل قيمة جديدة. يتم تطبيق التغييرات فوراً على التطبيق قيد التشغيل. هذا مفيد بشكل خاص لاختبار الحالات الحدودية: تعيين null في حقل إلزامي، استبدال ID بآخر غير موجود، التحقق من معالجة السلاسل الطويلة. جميع التغييرات تُثبت في الوقت الفعلي.
يتمتع Database Inspector بتكامل عميق مع Room، مما يجعله لا غنى عنه عند تطوير التطبيقات بهذه المكتبة. بالإضافة إلى الوظائف القياسية، يوفر المفتش إمكانيات خاصة بـ Room.
لقواعد بيانات Room، يعرض Database Inspector استعلامات SQL المُنشأة لكل طريقة DAO. يتيح لك ذلك التحقق من أن Room يُنشئ SQL صحيحاً، خاصة للاستعلامات المعقدة مع JOIN و @Relation و @Transaction. إذا نفذ Room استعلاماً غير فعال (مثل N+1 استعلام بدلاً من JOIN واحد)، يظهر ذلك فوراً في سجل استعلامات Database Inspector.
عند تحديث هيكل Room باستخدام AutoMigration أو الترحيل اليدوي، يُظهر Database Inspector هيكل الجدول الفعلي بعد الترحيل. فقط افتح المفتش بعد تشغيل التطبيق وتحقق من أن جميع الأعمدة والفهارس والمفاتيح الخارجية قد أُنشئت بشكل صحيح. إذا فشل الترحيل مع خطأ، لن تفتح قاعدة البيانات — ستظهر الأداة آخر إصدار متاح.
يسمح Room بدمج البيانات من جداول متعددة عبر @Relation و @Embedded. يساعد Database Inspector في التحقق بصرياً من صحة العلاقات من خلال عرض بيانات الجداول المرتبطة جنباً إلى جنب. لكل مفتاح خارجي، يمكنك الانتقال إلى الجدول المرتبط بنقرة واحدة.
// كيان مع Relation للتحقق عبر Database Inspector
@Entity(tableName = "users")
data class User(
@PrimaryKey val id: Int,
val name: String
)
data class UserWithOrders(
@Embedded val user: User,
@Relation(parentColumn = "id", entityColumn = "user_id")
val orders: List<Order>
)
يحل Database Inspector مهام تطوير محددة تنشأ عند العمل مع تخزين البيانات المحلي. دعنا نلقي نظرة على حالات الاستخدام الأكثر شيوعاً للأداة في العمل اليومي.
غالباً ما يخزن التطبيق استجابات API مؤقتاً في قاعدة بيانات محلية. يتيح لك Database Inspector التحقق من صحة التخزين المؤقت: بعد المزامنة، يمكنك رؤية السجلات الفعلية في جدول التخزين المؤقت. إذا لم تظهر البيانات — المشكلة في كود الحفظ. إذا ظهرت نسخ مكررة — المشكلة في منطق upsert.
عندما لا تحفظ طريقة DAO البيانات ولكنها لا ترمي استثناءً، يُظهر Database Inspector الحالة الفعلية للجدول. الأسباب النموذجية: تعارض المفتاح الأساسي (إعداد OnConflictStrategy)، نوع بيانات غير صحيح في عمود، انتهاك قيد NOT NULL أو انتهاك المفتاح الخارجي. يسمح المفتش برؤية مجموعة تغييرات قاعدة البيانات قبل العملية وبعدها. مقارنة لقطات البيانات قبل وبعد استدعاء DAO هي إحدى أكثر الطرق فعالية لتصحيح أخطاء المعاملات والتحقق من صحة منطق الأعمال للتطبيق أثناء عمليات الكتابة المعقدة.
عند تغيير هيكل الجداول — إضافة أعمدة، إعادة تسمية الحقول، تقسيم الجداول — يساعد Database Inspector في التحقق من نتيجة الترحيل. فقط قم بتشغيل التطبيق بالإصدار الجديد من قاعدة البيانات وتحقق من أن جميع البيانات قد نُقلت بشكل صحيح إلى الهيكل الجديد. إذا فُقدت البيانات بعد الترحيل، يمكنك استعادتها من نسخة احتياطية محفوظة قبل إعادة الهيكلة. هذا السيناريو مهم بشكل خاص عند الانتقال من SQLiteOpenHelper إلى Room أو عند تغيير هيكل الجداول الموجودة في إصدار جديد من التطبيق.
يمكن استخدام Database Inspector أيضاً لتقييم أداء استعلامات SQL. من خلال تنفيذ SELECT عبر علامة التبويب Query وقياس وقت الاستجابة، يمكنك تحديد الاستعلامات التي تفتقر إلى الفهارس. يسجل Room تلقائياً الاستعلامات البطيئة في Logcat مع علامة SLOW SQL، ويسمح لك Database Inspector بتنفيذ EXPLAIN QUERY PLAN فوراً لتحليل خطة التنفيذ.
الأسئلة الشائعة
تأكد من أن التطبيق يعمل في وضع Debug وأن API Level للجهاز هو 26 أو أعلى. إذا تم إنشاء قاعدة البيانات في عملية منفصلة أو باستخدام SQLCipher (تشفير)، فقد لا يكتشفها Database Inspector. لـ SQLCipher، استخدم قاعدة بيانات تصحيح أخطاء مساعدة بدون تشفير.
نعم، تحرير البيانات ممكن مباشرة في خلايا الجدول. النقر المزدوج على قيمة يسمح بتغييرها. تُطبق التغييرات فوراً على قاعدة بيانات التطبيق قيد التشغيل. لإضافة سجلات جديدة، استخدم استعلام SQL INSERT عبر علامة التبويب Query.
لا، Database Inspector لا يدعم Realm لأن Realm لا تستخدم SQLite. لتصحيح أخطاء Realm، استخدم Realm Object Server أو Realm Studio أو التسجيل داخل التطبيق. لـ MongoDB Realm SDK، أداة Realm Studio متاحة لأنظمة macOS و Windows و Linux.
يتيح لك Database Inspector تصدير قاعدة البيانات بالكامل. انقر بزر الماوس الأيمن على اسم قاعدة البيانات في القائمة واختر Export Database. سيتم حفظ ملف .db على جهاز الكمبيوتر الخاص بك. لعرضه، استخدم أي متصفح SQLite، مثل DB Browser for SQLite.
وفقاً لـ Google، العبء ضئيل — يقرأ Database Inspector ملفات WAL لقاعدة البيانات دون حظر الكتابة. قد يؤدي تنفيذ استعلامات SQL المخصصة إلى تحميل قاعدة البيانات مؤقتاً، لكن هذا يتحكم فيه المطور. يتم تعطيل الأداة تلقائياً لإصدارات الإنتاج.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا