2016-04-15 12 views
1

Gibt es eine Möglichkeit, den Fortschritt von SQLite ‚VACUUM‘ zu bekommen ich diese Codezeile hier in Java unter Verwendung von:Wie kommt man SQLite ‚VACUUM‘ Fortschritt

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

Die Benutzer (MySelf & I) muss von einigen Sekunden auf einige Minuten warten, ich weiß, dass die tatsächliche .db-Datei mit Hilfe einer Journaldatei überschrieben wird, die durch die Ausführung des Befehls erstellt wird.

Can i erhalte eine Schätzung mit Hilfe von Java IO oder so etwas? Vielen Dank für die Hilfe ..

Antwort

1

fand ich die Antwort auf meine question.So ich weiß, die Größe des tatsächlichen .db Datei und ich schrieb einen Dienst in JavaFX die alle 50 Millisekunden die Größe Db-Journal-Datei berechnet. so lese ich sehr häufig die Größe der Journaldatei, wie von% zu sehen ist, auf tatsächliche .db Datei Bauleute basiert:

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

Nr Der SQLite-C-API ein progress handler hat, aber es ist wahrscheinlich von Ihren Java-Treiber nicht ausgesetzt, und das Vakuum Die Verarbeitung wird mit einem anderen Mechanismus implementiert, der den Fortschritt ohnehin nicht meldet.

Sie könnten versuchen, die aktuelle Größe der Datenbankdatei und aller temporären Dateien zu sehen, aber es ist praktisch unmöglich, den Namen des letzteren zu bekommen.

+0

Vielen Dank für help.If verwende ich eine aufrufbare Anweisung oder schreiben von Code in C? Ich brauche einen Tipp ... Vakuum ist eine gespeicherte Prozedur? – GOXR3PLUS

+0

Wie ich geschrieben habe, würde weder eine aufrufbare Anweisung noch ein C-Code helfen. –

+0

Also basierend auf Ihrem zweiten Kommentar fand ich eine Antwort. Vielen Dank für die Idee ...! – GOXR3PLUS