【问题标题】:How to get SQLite 'VACUUM' Progress如何获得 SQLite 'VACUUM' 进度
【发布时间】:2016-04-15 00:17:32
【问题描述】:

有没有办法获得 sqlite 'VACUUM' 的进度?我在Java中使用这行代码:

connection1.createStatement().executeUpdate("VACUUM");

用户(MySelf 和我)必须等待几秒钟到几分钟,我知道实际的 .db 文件正在通过创建的日志文件的帮助下被覆盖执行命令。

可以使用 JAVA IO 或其他方法进行估算吗?谢谢您的帮助..

【问题讨论】:

    标签: java sqlite vacuum


    【解决方案1】:

    没有。 SQLite C API 有一个progress handler,但它可能不会被您的 Java 驱动程序公开,并且真空处理是通过一种不同的机制实现的,无论如何都不会报告进度。

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

    【讨论】:

    • 感谢您的帮助。如果我使用可调用语句或用 C 编写代码?我需要提示...真空是一个存储过程?
    • 正如我所写,可调用语句和 C 代码都无济于事。
    • 所以根据您的第二条评论,我找到了答案。感谢您的想法...!
    【解决方案2】:

    我找到了我的问题的答案。所以我知道 actual .db 文件的大小,我在 javaFX 中编写了一个服务,它每 50 毫秒计算一次大小.db-journal 文件。所以我经常检查日志文件的大小,看看 % 是如何根据实际的 .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;
            }
    
        };
    }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多