androidx.sqlite লাইব্রেরিতে মৌলিক বাস্তবায়নের সাথে বিমূর্ত ইন্টারফেস রয়েছে যা SQLite অ্যাক্সেস করে আপনার নিজস্ব লাইব্রেরি তৈরি করতে ব্যবহার করা যেতে পারে। আপনি রুম লাইব্রেরি ব্যবহার করার কথা বিবেচনা করতে চাইতে পারেন, যা SQLite-এর পূর্ণ শক্তি ব্যবহার করার সময় আরও শক্তিশালী ডাটাবেস অ্যাক্সেসের জন্য SQLite-এর উপর একটি বিমূর্তকরণ স্তর প্রদান করে।
নির্ভরতা সেট আপ করুন
আপনার KMP প্রোজেক্টে SQLite সেটআপ করতে, আপনার মডিউলের জন্য build.gradle.kts ফাইলে আর্টিফ্যাক্টগুলির জন্য নির্ভরতা যোগ করুন:
[versions]
sqlite = "2.6.1"
[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 ড্রাইভার APIs
androidx.sqlite লাইব্রেরি গোষ্ঠীগুলি androidx.sqlite:sqlite-bundled androidx.sqlite:sqlite-framework ব্যবহার করার সময় Android বা iOS-এর মতো হোস্ট প্ল্যাটফর্ম ব্যবহার করার সময় হয় লাইব্রেরিতে অন্তর্ভুক্ত SQLite লাইব্রেরির সাথে যোগাযোগের জন্য নিম্ন-স্তরের API অফার করে। APIs ঘনিষ্ঠভাবে 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 | অ্যান্ড্রয়েড, আইওএস, ম্যাক, লিনাক্স এবং জেভিএম (ডেস্কটপ) |
ব্যবহার করার জন্য প্রস্তাবিত বাস্তবায়ন হল BundledSQLiteDriver androidx.sqlite:sqlite-bundled এ উপলব্ধ। এতে উৎস থেকে সংকলিত SQLite লাইব্রেরি রয়েছে, যা সব সমর্থিত KMP প্ল্যাটফর্ম জুড়ে সবচেয়ে আপ-টু-ডেট সংস্করণ এবং ধারাবাহিকতা প্রদান করে।
SQLite ড্রাইভার এবং রুম
ড্রাইভার APIগুলি একটি SQLite ডাটাবেসের সাথে নিম্ন-স্তরের মিথস্ক্রিয়াগুলির জন্য দরকারী। একটি বৈশিষ্ট্য সমৃদ্ধ লাইব্রেরির জন্য যা SQLite এর আরও শক্তিশালী অ্যাক্সেস প্রদান করে তারপর রুম সুপারিশ করা হয়।
একটি RoomDatabase ডাটাবেস ক্রিয়াকলাপ সম্পাদন করার জন্য একটি SQLiteDriver উপর নির্ভর করে এবং RoomDatabase.Builder.setDriver() ব্যবহার করে একটি বাস্তবায়ন কনফিগার করা প্রয়োজন৷ পরিচালিত ডাটাবেস সংযোগগুলিতে আরও সরাসরি অ্যাক্সেসের জন্য রুমটি 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
}
}