উত্তর:
এটি করার জন্য আপনি একটি ডিএও পদ্ধতি তৈরি করতে পারেন।
@Dao
interface MyDao {
@Query("DELETE FROM myTableName")
public void nukeTable();
}
@Query
ফলাফলগুলি সেটগুলির মতোই সীমাবদ্ধ ছিল (অনুরূপ rawQuery()
)। খুব ঠান্ডা!
@Delete
কোনও পরামিতি না নিয়ে সমস্ত টেবিল থেকে মুছুন? আমি ফাইল করার জন্য রুমের ট্র্যাকার সন্ধান করার চেষ্টা করছি ...
Ids
? আমি এটি পছন্দ করেছিলাম তবে টেবিল আইডিগুলি বৃদ্ধি অবিরত করে। বাস্তব টেবিল ড্রপ আইডি আবার 0 থেকে শুরু করতে বাদ দেওয়া হয়।
রুম হিসাবে 1.1.0
আপনি ক্লিয়ারআল টেবিল () ব্যবহার করতে পারেন যা:
সত্তা () হিসাবে এই ডাটাবেসে নিবন্ধিত সমস্ত সারণী থেকে সমস্ত সারি মুছে ফেলা হয়।
SELECT name FROM sqlite_master WHERE type='table'
তবে আপনি ম্যানুয়ালি এর মতো কিছু চেষ্টা করতে চাইতে পারেন DELETE FROM {TABLE}
। যদিও এটি পরীক্ষা করা হয়নি।
রুমে টেবিল থেকে কোনও প্রবেশ মুছতে চাইলে কেবল এই ফাংশনটিতে কল করুন,
@Dao
public interface myDao{
@Delete
void delete(MyModel model);
}
আপডেট: এবং আপনি যদি পুরো টেবিলটি মুছতে চান তবে নীচে ফাংশনটিতে কল করুন,
@Query("DELETE FROM MyModel")
void delete();
দ্রষ্টব্য: এখানে মাইমোডেল একটি সারণীর নাম।
এড়ানোর জন্য নিচের মত আরএক্সজাবার সাথে ক্লিয়ারআলটেলগুলি () ব্যবহার করুনjava.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
Completable.fromAction(new Action() {
@Override
public void run() throws Exception {
getRoomDatabase().clearAllTables();
}
}).subscribeOn(getSchedulerProvider().io())
.observeOn(getSchedulerProvider().ui())
.subscribe(new Action() {
@Override
public void run() throws Exception {
Log.d(TAG, "--- clearAllTables(): run() ---");
getInteractor().setUserAsLoggedOut();
getMvpView().openLoginActivity();
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Log.d(TAG, "--- clearAllTables(): accept(Throwable throwable) ----");
Log.d(TAG, "throwable.getMessage(): "+throwable.getMessage());
}
});
ব্যাকগ্রাউন্ডে এই টাস্কটি কার্যকর করতে RxJava ব্যবহার করার সময় আমার সমস্ত পদ্ধতি মুছে ফেলার সমস্যা ছিল । অবশেষে আমি এটি সমাধান করেছি:
@Dao
interface UserDao {
@Query("DELETE FROM User")
fun deleteAll()
}
এবং
fun deleteAllUsers() {
return Maybe.fromAction(userDao::deleteAll)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe ({
d("database rows cleared: $it")
}, {
e(it)
}).addTo(compositeDisposable)
}
thread {}
আরএক্সজাভা
মিশ্রন কি ডিক লুকাস বলেছেন এবং অন্যান্য Stackoverflow পোস্ট থেকে একটি রিসেট autoincremental যোগ, আমি মনে করি এটা করতে পারেন কাজ:
fun clearAndResetAllTables(): Boolean {
val db = db ?: return false
// reset all auto-incrementalValues
val query = SimpleSQLiteQuery("DELETE FROM sqlite_sequence")
db.beginTransaction()
return try {
db.clearAllTables()
db.query(query)
db.setTransactionSuccessful()
true
} catch (e: Exception){
false
} finally {
db.endTransaction()
}
}
@Query
টীকাগুলির অপব্যবহার না করে ঘরটি ব্যবহার @Query
করার জন্য প্রথমে সমস্ত সারি নির্বাচন করে একটি তালিকায় রাখুন, উদাহরণস্বরূপ:
@Query("SELECT * FROM your_class_table")
List`<`your_class`>` load_all_your_class();
মুছা টিকাতে তার তালিকাটি রাখুন, উদাহরণস্বরূপ:
@Delete
void deleteAllOfYourTable(List`<`your_class`>` your_class_list);
এখানে আমি কোটলিনে এটি কীভাবে করেছি।
ডিআই (কোয়েন) ব্যবহার করে ক্রিয়াকলাপে রুম ডিবি ইনজেক্ট করুন।
private val appDB: AppDB by inject()
তারপরে আপনি কেবল ক্লিয়ারঅল টেবিলগুলি () কল করতে পারেন
ব্যক্তিগত মজাদার ক্লিয়ারমূডবিবি () {গ্লোবালস্কোপ.লাঞ্চ {appDB.clearAllTables () পছন্দসইগুলি
clearAllTables()
যা "এই ডাটাবেসে নিবন্ধিত সমস্ত টেবিল থেকে সমস্ত সারি সরিয়ে দেয় সত্তা () হিসাবে।" আমি এটি নীচে একটি উত্তর হিসাবে অন্তর্ভুক্ত করেছি, কিন্তু দৃশ্যমানতার জন্য এখানে পুনরুত্পাদন করছি।