Android Studio-তে Database Inspector হল একটি অন্তর্নির্মিত টুল যা মোবাইল অ্যাপ্লিকেশনের SQLite ডাটাবেস রিয়েল টাইমে দেখার এবং ডিবাগ করার জন্য। অফিসিয়াল Android Developers ডকুমেন্টেশন (2025) অনুযায়ী, টুলটি সক্রিয় ডাটাবেসে SQL কোয়েরি নির্বাহ করতে, টেবিল স্ট্রাকচার দেখতে এবং অ্যাপ্লিকেশন বন্ধ না করেই রেকর্ড সম্পাদনা করতে দেয়। টুলটি Room, SQLiteOpenHelper এবং যেকোনো in-app ডাটাবেস সমর্থন করে, প্রোফাইলিং শুরু হলে স্বয়ংক্রিয়ভাবে সেগুলি শনাক্ত করে।
মূল পয়েন্ট
Database Inspector হল Android Studio-র একটি টুল যা মোবাইল অ্যাপ্লিকেশনে স্থানীয় ডাটাবেস পরিদর্শন এবং ডিবাগ করার জন্য। এটি অ্যাপ্লিকেশন দ্বারা তৈরি সমস্ত SQLite ডাটাবেস দেখার অনুমতি দেয়, যার মধ্যে Room ডাটাবেস, SQLiteOpenHelper এবং থার্ড-পার্টি লাইব্রেরি অন্তর্ভুক্ত। টুলটি Android Studio 4.1 থেকে উপলব্ধ এবং Android Profiler-এর মাধ্যমে বা সরাসরি View মেনু থেকে চালু করা যেতে পারে।
Database Inspector-এর প্রধান উদ্দেশ্য হল উন্নয়নের সময় ডাটা ভিজুয়ালাইজেশন। ডাটাবেস বিষয়বস্তু লগে আউটপুট করা বা ডাটা দেখার জন্য আলাদা স্ক্রিন লেখার পরিবর্তে, ডেভেলপার Database Inspector খুলতে পারেন এবং সঙ্গে সঙ্গেই সমস্ত টেবিল, তাদের স্কিমা এবং বিষয়বস্তু দেখতে পারেন। টুলটি রিলেশনাল SQLite ডাটাবেস এবং Auto-মাইগ্রেশন সহ Room উভয়ই সমর্থন করে।
টুলটি সেই পরিস্থিতিতে অপরিহার্য যখন একটি অপারেশন করার পরে আপনাকে ডাটা স্টোরেজের সঠিকতা যাচাই করতে হয়: ব্যবহারকারী নিবন্ধন, সার্ভার সিঙ্ক্রোনাইজেশন, তালিকা ক্যাশিং। একটি পরীক্ষা UI লেখার পরিবর্তে, ডাটাবেস ডাম্প Database Inspector-এর মাধ্যমে দেখা হয়। টুলটি Room মাইগ্রেশন ডিবাগ করার জন্যও সক্রিয়ভাবে ব্যবহৃত হয় — আপনি প্রতিটি স্কিমা আপডেটের পরে প্রকৃত টেবিল স্কিমা দেখতে পারেন।
Database Inspector Android Profiler Service-এর মাধ্যমে Android অ্যাপ্লিকেশনের প্রক্রিয়ার সাথে সংযুক্ত হয়। এটি অ্যাপ্লিকেশনের সমস্ত খোলা SQLite সংযোগ সনাক্ত করে এবং সাইড প্যানেলে প্রদর্শন করে। API Level 26 (Android 8.0) এবং তার উপরে সহ অ্যাপ্লিকেশনের Debug বিল্ড প্রয়োজন।
চালু হলে, Database Inspector ডিভাইসের অ্যাপ্লিকেশন এবং কম্পিউটারের IDE-র মধ্যে একটি ADB টানেল তৈরি করে। বিষয়বস্তু প্রদর্শনের জন্য SQLite WAL (Write-Ahead Logging) ডাটাবেস ফাইলগুলি এই টানেলের মাধ্যমে স্ট্রিম করা হয়। SQL কমান্ড Room এবং SQLiteDatabase-এ Database Inspector-এর সমর্থনের মাধ্যমে সরাসরি অ্যাপ্লিকেশনের SQLite Engine-এ পাঠানো হয়। টুলটি স্বয়ংক্রিয়ভাবে সনাক্ত করে কখন অ্যাপ্লিকেশন একটি ডাটাবেস খোলে এবং এটি পরিদর্শিত তালিকায় যুক্ত করে।
Database Inspector সঠিকভাবে কাজ করার জন্য, আপনার প্রয়োজন: Android Studio 4.1+, API Level 26+ সহ একটি ডিভাইস বা এমুলেটর এবং অ্যাপ্লিকেশনের Debug বিল্ড। Room-এর জন্য, অতিরিক্তভাবে room-runtime লাইব্রেরি সংস্করণ 2.2+ প্রয়োজন। যদি ডাটাবেস WAL মোডে তৈরি করা হয়, যা Room 2.2+-এর জন্য মানক, টুলটি মূল অ্যাপ্লিকেশন ব্লক না করেই ডাটা পড়তে পারে।
// Database Inspector দ্বারা সমর্থিত Room ডাটাবেসের উদাহরণ
@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 প্রতিটি DAO পদ্ধতির জন্য উৎপন্ন SQL কোয়েরি দেখায়। এটি যাচাই করতে দেয় যে Room সঠিক SQL উৎপন্ন করে, বিশেষ করে JOIN, @Relation এবং @Transaction-এর সাথে জটিল কোয়েরির জন্য। যদি Room একটি অদক্ষ কোয়েরি নির্বাহ করে (যেমন, একটি JOIN-এর পরিবর্তে N+1 কোয়েরি), এটি Database Inspector কোয়েরি লগে অবিলম্বে দৃশ্যমান হয়।
AutoMigration বা ম্যানুয়াল মাইগ্রেশনের সাথে Room স্কিমা আপডেট করার সময়, Database Inspector মাইগ্রেশনের পরে প্রকৃত টেবিল কাঠামো দেখায়। অ্যাপ্লিকেশন চালু করার পরে ইন্সপেক্টর খুলুন এবং পরীক্ষা করুন যে সমস্ত কলাম, ইনডেক্স এবং ফরেন কী সঠিকভাবে তৈরি হয়েছে। যদি মাইগ্রেশন ত্রুটির সাথে ব্যর্থ হয়, ডাটাবেস খুলবে না — টুলটি শেষ উপলব্ধ সংস্করণ দেখাবে।
Room @Relation এবং @Embedded-এর মাধ্যমে একাধিক টেবিল থেকে ডাটা একত্রিত করার অনুমতি দেয়। Database Inspector সম্পর্কিত টেবিলের ডাটা পাশাপাশি প্রদর্শন করে সম্পর্কের সঠিকতা দৃশ্যমানভাবে যাচাই করতে সাহায্য করে। প্রতিটি ফরেন কী-র জন্য, আপনি এক ক্লিকে সম্পর্কিত টেবিলে যেতে পারেন।
// Database Inspector-এর মাধ্যমে পরীক্ষার জন্য Relation সহ Entity
@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 টেবিলের প্রকৃত অবস্থা দেখায়। সাধারণ কারণ: Primary Key দ্বন্দ্ব (OnConflictStrategy সেটিং), কলামে ভুল ডাটা ধরন, NOT NULL সীমাবদ্ধতা লঙ্ঘন বা Foreign Key লঙ্ঘন। ইন্সপেক্টর আপনাকে অপারেশনের আগে এবং পরে ডাটাবেস পরিবর্তন সেট দেখতে দেয়। DAO কলের আগে এবং পরে ডাটা স্ন্যাপশট তুলনা করা লেনদেন সংক্রান্ত ত্রুটি ডিবাগ করার এবং জটিল লেখার অপারেশনের সময় অ্যাপ্লিকেশন বিজনেস লজিকের সঠিকতা যাচাই করার সবচেয়ে কার্যকর উপায়গুলির মধ্যে একটি।
টেবিল স্কিমা পরিবর্তন করার সময় — কলাম যোগ করা, ফিল্ডের নাম পরিবর্তন করা, টেবিল বিভক্ত করা — Database Inspector মাইগ্রেশন ফলাফল যাচাই করতে সাহায্য করে। নতুন ডাটাবেস সংস্করণ সহ অ্যাপ্লিকেশন চালু করুন এবং যাচাই করুন যে সমস্ত ডাটা নতুন কাঠামোতে সঠিকভাবে স্থানান্তরিত হয়েছে। যদি মাইগ্রেশনের পরে ডাটা অনুপস্থিত থাকে, আপনি পুনর্গঠনের আগে সংরক্ষিত ডাম্প থেকে এটি পুনরুদ্ধার করতে পারেন। এই পরিস্থিতি SQLiteOpenHelper থেকে Room-এ মাইগ্রেট করার সময় বা অ্যাপ্লিকেশনের নতুন সংস্করণে বিদ্যমান টেবিলের কাঠামো পরিবর্তন করার সময় বিশেষভাবে প্রাসঙ্গিক।
Database Inspector SQL কোয়েরি পারফরম্যান্স মূল্যায়ন করতেও ব্যবহার করা যেতে পারে। Query ট্যাবের মাধ্যমে SELECT নির্বাহ করে এবং প্রতিক্রিয়া সময় মেপে, আপনি সূচকের অভাব রয়েছে এমন কোয়েরি সনাক্ত করতে পারেন। Room স্বয়ংক্রিয়ভাবে Logcat-এ SLOW SQL ট্যাগ দিয়ে ধীর কোয়েরি লগ করে, এবং Database Inspector আপনাকে নির্বাহ পরিকল্পনা বিশ্লেষণের জন্য অবিলম্বে EXPLAIN QUERY PLAN নির্বাহ করতে দেয়।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
নিশ্চিত করুন যে অ্যাপ্লিকেশনটি Debug মোডে চলছে এবং ডিভাইসের API Level 26 বা তার বেশি। যদি ডাটাবেস একটি পৃথক প্রক্রিয়ায় বা SQLCipher (এনক্রিপশন) ব্যবহার করে তৈরি করা হয়, Database Inspector এটি সনাক্ত নাও করতে পারে। SQLCipher-এর জন্য, এনক্রিপশন ছাড়া একটি সহায়ক ডিবাগ ডাটাবেস ব্যবহার করুন।
হ্যাঁ, ডাটা সম্পাদনা সরাসরি টেবিল কোষে সম্ভব। একটি মান ডাবল-ক্লিক করলে তা পরিবর্তন করা যায়। পরিবর্তনগুলি অবিলম্বে চলমান অ্যাপ্লিকেশনের ডাটাবেসে প্রয়োগ করা হয়। নতুন রেকর্ড যোগ করতে, Query ট্যাবের মাধ্যমে INSERT SQL কোয়েরি ব্যবহার করুন।
না, 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 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন