Java 如何获取SQLite';真空&x27;进展

Java 如何获取SQLite';真空&x27;进展,java,sqlite,vacuum,Java,Sqlite,Vacuum,有没有办法获得sqlite“真空”的进度?我在Java中使用这行代码: connection1.createStatement().executeUpdate("VACUUM"); 用户(我自己&I)必须等待几秒钟到几分钟,我知道在通过执行命令创建的日志文件的帮助下,实际的.db文件被重写了 我能用JAVA IO或其他什么东西得到一个估计值吗?谢谢你的帮助 没有。 SQLite C API有一个,但它可能不会被Java驱动程序公开,真空处理是用一种不同的机制实现的,它不会报告进度 您可以尝试查

有没有办法获得sqlite“真空”的进度?我在Java中使用这行代码:

connection1.createStatement().executeUpdate("VACUUM");
用户(我自己&I)必须等待几秒钟到几分钟,我知道在通过执行命令创建的日志文件的帮助下,实际的.db文件被重写了

我能用JAVA IO或其他什么东西得到一个估计值吗?谢谢你的帮助

没有。 SQLite C API有一个,但它可能不会被Java驱动程序公开,真空处理是用一种不同的机制实现的,它不会报告进度


您可以尝试查看数据库文件和任何临时文件的当前大小,但实际上不可能得到后者的名称。

我找到了问题的答案。因此我知道实际.db文件的大小,并且我在javaFX中编写了一个服务,它每50毫秒计算一次.db日志文件的大小。因此我经常检查日志文件的大小要查看如何基于实际的.db文件构建%的,请执行以下操作:

package windows;

import java.io.File;

import javafx.concurrent.Service;
import javafx.concurrent.Task;

 /** Get the progress of Vacuum Operation */
public class VacuumProgress extends Service<Void> {

File basicFile;
File journalFile;

/**
 * Starts the Vacuum Progress Service
 * 
 * @param basicFile
 * @param journalFile
 */
public void start(File basicFile, File journalFile) {
    this.basicFile = basicFile;
    this.journalFile = journalFile;
    reset();
    start();
}

@Override
protected Task<Void> createTask() {
    return new Task<Void>() {
        @Override
        protected Void call() throws Exception {

            System.out.println("Started...");

            long bfL = basicFile.length();
            while (!journalFile.exists()) {
                Thread.sleep(50);
                System.out.println("Journal File not yet Created!");
            }
            long jfL = journalFile.length();

            while (jfL <= bfL) {
                updateProgress(jfL = journalFile.length(), bfL);
                Thread.sleep(50);
            }

            System.out.println("Exited Vacuum Progress Service");
            return null;
        }

    };
}

}
包窗口;
导入java.io.File;
导入javafx.concurrent.Service;
导入javafx.concurrent.Task;
/**了解真空操作的进展情况*/
公共类VacuumProgress扩展服务{
文件基本文件;
文件日志文件;
/**
*启动真空进程服务
* 
*@param基本文件
*@param日志文件
*/
公共作废开始(文件基本文件、文件日志文件){
this.basicFile=basicFile;
this.journalFile=日志文件;
重置();
start();
}
@凌驾
受保护的任务createTask(){
返回新任务(){
@凌驾
受保护的Void调用()引发异常{
System.out.println(“已启动…”);
long bfL=基本文件长度();
而(!journalFile.exists()){
睡眠(50);
System.out.println(“尚未创建日志文件!”);
}
long jfL=journalFile.length();

while(jfL)感谢您的帮助。如果我使用可调用语句或用C编写代码?我需要一个提示…真空是一个存储过程?正如我所写的,无论是可调用语句还是C代码都没有帮助。因此根据您的第二条评论,我找到了答案。谢谢您的想法。。。!