我想每次删除整个表中的雇员。该表包含100万条记录(100mb)。当我执行以下代码时,我得到以下消息以及模拟器中的低磁盘存储空间。我增加了存储空间并再次运行它,但过一会儿会抛出相同的错误,并再次导致存储空间不足。似乎由于某种原因占用了所有设备存储空间。
android.database.sqlite.SQLiteException:无法回滚-处没有事务处于活动状态(代码1) android.database.sqlite.SQLiteConnection.nativeExecute(本机方法) 在 android.database.sqlite.SQLiteConnection.execute(SQLiteConnection.java:555) 在 android.database.sqlite.SQLiteSession.endTransactionUnchecked(SQLiteSession.java:439) 在 android.database.sqlite.SQLiteSession.endTransaction(SQLiteSession.java:401) 在 android.database.sqlite.SQLiteDatabase.endTransaction(SQLiteDatabase.java:522) 在 android.arch.persistence.db.framework.FrameworkSQLiteDatabase.endTransaction(FrameworkSQLiteDatabase.java:90) 在 android.arch.persistence.room.RoomDatabase.endTransaction(RoomDatabase.java:261) 在 com.ehr.Database.Daos.EmployeeDao_Impl.deleteEmployees(EmployeeDao_Impl.java:175) 在com.ehr.DataRepository $ 7.run(DataRepository.java:450)在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 在 java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587) 在java.lang.Thread.run(Thread.java:841)
非常重要的笔记
有什么想法吗?这是错误吗?
代码
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((BasicApp) getApplication()).getRepository().getNotifyEmployee().observe(this,new Observer<Integer>() {
@Override
public void onChanged(@Nullable Integer number) {
//staff
}
});
executors.diskIO().execute(new Runnable() {
@Override
public void run() {
mDatabase.repoEmployee().deleteEmployees();
});
}
}
Dao
@Dao
public interface EmployeeDao {
@Query("DELETE FROM Employee")
void deleteEmployees();
@Transaction @Query("SELECT COUNT(*) FROM Employee")
LiveData<Integer> getNotifyEmployee();
}