Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQLite真空命令_Java_Android_Multithreading_Sqlite_Android Asynctask - Fatal编程技术网

Java SQLite真空命令

Java SQLite真空命令,java,android,multithreading,sqlite,android-asynctask,Java,Android,Multithreading,Sqlite,Android Asynctask,正常情况下,我使用的是我的应用程序,超过30000次下载没有问题。但是我看到这个错误开始出现在android开发者控制台(Crash&ANRS) 按应用程序版本 3.1.1 100.0% 安卓版本安卓2.3.3-2.3.7 1100.0% 按设备刀片(刀片) 这是我的代码: public void deletetable(String Tablename){ SQLiteDatabase db = mContext.openOrCreateDatabase(DB_NAME,

正常情况下,我使用的是我的应用程序,超过30000次下载没有问题。但是我看到这个错误开始出现在android开发者控制台(Crash&ANRS)

按应用程序版本 3.1.1 100.0%

安卓版本安卓2.3.3-2.3.7 1100.0%

按设备刀片(刀片)

这是我的代码:

public  void deletetable(String Tablename){
    SQLiteDatabase db = mContext.openOrCreateDatabase(DB_NAME,
            Context.MODE_PRIVATE, null);
    db.delete(Tablename, null, null);
    db.execSQL("VACUUM"); 
}
本报讯:

java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:200)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1019)
Caused by: android.database.sqlite.SQLiteDiskIOException: disk I/O error: VACUUM
at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1763)
at com.restroomgames.kpss.TestAdapter.deletetable(TestAdapter.java:194)
at com.restroomgames.kpss.TrGenelSinavAnasayfa.yenile(TrGenelSinavAnasayfa.java:395)
at com.restroomgames.kpss.TrGenelSinavAnasayfa$refreshyazi.doInBackground(TrGenelSinavAnasayfa.java:381)
at com.restroomgames.kpss.TrGenelSinavAnasayfa$refreshyazi.doInBackground(TrGenelSinavAnasayfa.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:185)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
... 4 more

该报告可能意味着在写入特定用户设备上的DB(I/O错误)时出现问题

在VACCUM文档中提到,如果有其他SQL事务正在进行,VACCUM将不起作用,因此这可能是最初的原因

这里除了用try/catch语句围绕该事务之外,可以做的事情不多

另一方面,VACCUM不接受任何论点,至少在旧版本中是这样。较新的sqlite3版本在尝试运行VACCUM时抱怨语法错误

真空文件可在此处找到:


“如果存在打开的事务,或者运行时存在一个或多个活动SQL语句,真空将失败。”

来自真空文档:

真空命令的工作原理是将数据库的内容复制到 一个临时数据库文件,然后用 临时文件的内容。覆盖原始文件时,会出现 回滚日志或提前写入日志文件的使用方式与此相同 用于任何其他数据库事务这意味着在吸尘时 一个数据库,其大小是原始数据库文件的两倍 在可用磁盘空间中需要。

可能是磁盘上没有足够的可用空间来执行真空操作

尝试使用“真空”,它可以修复错误