androidx.sqlite লাইব্রেরিতে মৌলিক বাস্তবায়নের সাথে বিমূর্ত ইন্টারফেস রয়েছে যা SQLite অ্যাক্সেস করার জন্য আপনার নিজস্ব লাইব্রেরি তৈরি করতে ব্যবহার করা যেতে পারে। আপনি Room লাইব্রেরি ব্যবহার করার কথা বিবেচনা করতে পারেন, যা SQLite এর উপর একটি বিমূর্ত স্তর প্রদান করে যা SQLite এর সম্পূর্ণ শক্তি ব্যবহার করে আরও শক্তিশালী ডাটাবেস অ্যাক্সেসের অনুমতি দেয়।
নির্ভরতা সেট আপ করুন
আপনার KMP প্রজেক্টে SQLite সেটআপ করতে, আপনার মডিউলের build.gradle.kts ফাইলে আর্টিফ্যাক্টের জন্য নির্ভরতা যোগ করুন:
[versions]
sqlite = "2.6.2"
[libraries]
# The SQLite Driver interfaces
androidx-sqlite = { module = "androidx.sqlite:sqlite", version.ref = "sqlite" }
# The bundled SQLite driver implementation
androidx-sqlite-bundled = { module = "androidx.sqlite:sqlite-bundled", version.ref = "sqlite" }
[plugins]
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
SQLite ড্রাইভার API গুলি
androidx.sqlite লাইব্রেরি গ্রুপগুলি androidx.sqlite:sqlite-bundled ব্যবহার করার সময় লাইব্রেরিতে অন্তর্ভুক্ত SQLite লাইব্রেরির সাথে যোগাযোগের জন্য নিম্ন-স্তরের API অফার করে অথবা androidx.sqlite:sqlite-framework ব্যবহার করার সময় Android বা iOS এর মতো হোস্ট প্ল্যাটফর্মে থাকে। APIগুলি SQLite C API এর মূল কার্যকারিতা ঘনিষ্ঠভাবে অনুসরণ করে।
3টি প্রধান ইন্টারফেস রয়েছে:
-
SQLiteDriver- এটি SQLite ব্যবহারের প্রবেশ বিন্দু এবং ডাটাবেস সংযোগ খোলার জন্য দায়ী। -
SQLiteConnection- এটিsqlite3অবজেক্টের প্রতিনিধিত্ব করে। -
SQLiteStatement- এটিsqlite3_stmtঅবজেক্টের প্রতিনিধিত্ব করে।
নিম্নলিখিত উদাহরণটি মূল API গুলি প্রদর্শন করে:
fun main() {
val databaseConnection = BundledSQLiteDriver().open("todos.db")
databaseConnection.execSQL(
"CREATE TABLE IF NOT EXISTS Todo (id INTEGER PRIMARY KEY, content TEXT)"
)
databaseConnection.prepare(
"INSERT OR IGNORE INTO Todo (id, content) VALUES (? ,?)"
).use { stmt ->
stmt.bindInt(index = 1, value = 1)
stmt.bindText(index = 2, value = "Try Room in the KMP project.")
stmt.step()
}
databaseConnection.prepare("SELECT content FROM Todo").use { stmt ->
while (stmt.step()) {
println("Action item: ${stmt.getText(0)}")
}
}
databaseConnection.close()
}
SQLite C API গুলির মতোই, সাধারণ ব্যবহার হল:
- ইনস্ট্যান্টিয়েটেড
SQLiteDriverবাস্তবায়ন ব্যবহার করে একটি ডাটাবেস সংযোগ খুলুন। -
SQLiteConnection.prepare()ব্যবহার করে একটি SQL স্টেটমেন্ট প্রস্তুত করুন। - নিম্নলিখিত পদ্ধতিতে একটি
SQLiteStatementকার্যকর করুন:- ঐচ্ছিকভাবে
bind*()ফাংশন ব্যবহার করে আর্গুমেন্টগুলিকে আবদ্ধ করুন। -
step()ফাংশন ব্যবহার করে ফলাফল সেটটি পুনরাবৃত্তি করুন। -
get*()ফাংশন ব্যবহার করে ফলাফল সেট থেকে কলামগুলি পড়ুন।
- ঐচ্ছিকভাবে
ড্রাইভার বাস্তবায়ন
নিম্নলিখিত টেবিলে উপলব্ধ ড্রাইভার বাস্তবায়নের সারসংক্ষেপ দেওয়া হল:
ক্লাসের নাম | শিল্পকর্ম | সমর্থিত প্ল্যাটফর্মগুলি |
AndroidSQLiteDriver | androidx.sqlite:sqlite-framework | অ্যান্ড্রয়েড |
NativeSQLiteDriver | androidx.sqlite:sqlite-framework | iOS, Mac, এবং Linux |
BundledSQLiteDriver | androidx.sqlite:sqlite-bundled | অ্যান্ড্রয়েড, আইওএস, ম্যাক, লিনাক্স এবং জেভিএম (ডেস্কটপ) |
androidx.sqlite:sqlite-bundled এ উপলব্ধ BundledSQLiteDriver ব্যবহার করার জন্য প্রস্তাবিত বাস্তবায়ন। এতে উৎস থেকে সংকলিত SQLite লাইব্রেরি অন্তর্ভুক্ত রয়েছে, যা সমস্ত সমর্থিত KMP প্ল্যাটফর্মগুলিতে সবচেয়ে আপ-টু-ডেট সংস্করণ এবং ধারাবাহিকতা প্রদান করে।
SQLite ড্রাইভার এবং রুম
SQLite ডাটাবেসের সাথে নিম্ন-স্তরের ইন্টারঅ্যাকশনের জন্য ড্রাইভার API গুলি কার্যকর। বৈশিষ্ট্য সমৃদ্ধ লাইব্রেরির জন্য যা SQLite-এর আরও শক্তিশালী অ্যাক্সেস প্রদান করে, তাহলে Room সুপারিশ করা হয়।
একটি RoomDatabase ডাটাবেস ক্রিয়াকলাপ সম্পাদনের জন্য একটি SQLiteDriver উপর নির্ভর করে এবং RoomDatabase.Builder.setDriver() ব্যবহার করে একটি বাস্তবায়ন কনফিগার করতে হয়। পরিচালিত ডাটাবেস সংযোগগুলিতে আরও সরাসরি অ্যাক্সেসের জন্য Room RoomDatabase.useReaderConnection এবং RoomDatabase.useWriterConnection প্রদান করে।
কোটলিন মাল্টিপ্ল্যাটফর্মে স্থানান্তর করুন
নিম্ন-স্তরের সাপোর্ট SQLite API উপাদানগুলির (যেমন SupportSQLiteDatabase ইন্টারফেস) যেকোনো ব্যবহারকে সমতুল্য SQLite ড্রাইভার উপাদানগুলিতে স্থানান্তরিত করতে হবে।
কোটলিন মাল্টিপ্ল্যাটফর্ম
নিম্ন-স্তরের SQLiteConnection ব্যবহার করে একটি লেনদেন সম্পাদন করুন
val connection: SQLiteConnection = ...
connection.execSQL("BEGIN IMMEDIATE TRANSACTION")
try {
// perform database operations in transaction
connection.execSQL("END TRANSACTION")
} catch(t: Throwable) {
connection.execSQL("ROLLBACK TRANSACTION")
}
কোনও ফলাফল ছাড়াই একটি কোয়েরি সম্পাদন করুন
val connection: SQLiteConnection = ...
connection.execSQL("ALTER TABLE ...")
ফলাফল সহ একটি কোয়েরি কার্যকর করুন কিন্তু কোনও আর্গুমেন্ট নেই
val connection: SQLiteConnection = ...
connection.prepare("SELECT * FROM Pet").use { statement ->
while (statement.step()) {
// read columns
statement.getInt(0)
statement.getText(1)
}
}
ফলাফল এবং আর্গুমেন্ট সহ একটি কোয়েরি কার্যকর করুন
connection.prepare("SELECT * FROM Pet WHERE id = ?").use { statement ->
statement.bindInt(1, id)
if (statement.step()) {
// row found, read columns
} else {
// row not found
}
}
শুধুমাত্র অ্যান্ড্রয়েড ব্যবহারকারীদের জন্য
SupportSQLiteDatabase ব্যবহার করে একটি লেনদেন করুন
val database: SupportSQLiteDatabase = ...
database.beginTransaction()
try {
// perform database operations in transaction
database.setTransactionSuccessful()
} finally {
database.endTransaction()
}
কোনও ফলাফল ছাড়াই একটি কোয়েরি সম্পাদন করুন
val database: SupportSQLiteDatabase = ...
database.execSQL("ALTER TABLE ...")
ফলাফল সহ একটি কোয়েরি কার্যকর করুন কিন্তু কোনও আর্গুমেন্ট নেই
val database: SupportSQLiteDatabase = ...
database.query("SELECT * FROM Pet").use { cursor ->
while (cusor.moveToNext()) {
// read columns
cursor.getInt(0)
cursor.getString(1)
}
}
ফলাফল এবং আর্গুমেন্ট সহ একটি কোয়েরি কার্যকর করুন
database.query("SELECT * FROM Pet WHERE id = ?", id).use { cursor ->
if (cursor.moveToNext()) {
// row found, read columns
} else {
// row not found
}
}