2016-04-15 1 views
1

をプログレス取得する方法:(SQLiteの「VACUUM」私はJavaで、ここでのコード行を使用しています<strong>sqliteの</strong>「VACUUM」の進捗状況を取得する方法がある

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

ユーザーを? MySelf & I)は数秒から数分待つ必要があります。実際の.dbファイルは、コマンドの実行によって作成されたジャーナルファイルの助けによって上書きされています。

私はJAVA IOか何かを使って推定を得ることができますか?助けてくれてありがとう。..

答えて

1

私は私のquestion.So私は実際の.dbファイルのサイズを知っていると私はすべての50ミリ秒.DB-ジャーナルファイルのサイズを計算しJavaFXのでのサービスを書いた答えを見つけました。だから私は、実際の.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; 
     } 

    }; 
} 

} 
1

号 をSQLiteのC APIがprogress handlerを持っていますが、それはおそらくあなたのJavaドライバによって公開されていない、と真空処理は進捗状況を報告しない別のメカニズムで実装されます。

データベースファイルと一時ファイルの現在のサイズを調べることはできますが、後者の名前を取得することは事実上不可能です。

+0

私は呼び出し可能ステートメントを使用するか、Cでコードを書くhelp.Ifをありがとう!私はヒントが必要です...真空はストアドプロシージャですか? – GOXR3PLUS

+0

私が書いたように、呼び出し可能なステートメントもCコードも役に立ちません。 –

+0

あなたの2番目のコメントに基づいて、私は答えを見つけました。 – GOXR3PLUS

関連する問題