2014-06-12 72 views
-1

我正在處理javafx項目,我想創建加載符號執行我的sql查詢,但我怎麼知道我的查詢的執行的每個部分。javafx加載sql查詢的詳細信息執行

我的代碼:

Thread df1=new Thread(){ 

    public void run(){ 

    for(int i=1;i<=1;i++){ 

     try{ 

      System.out.print("1%"); 
      Class.forName("com.mysql.jdbc.Driver"); 
      Connection con=(Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/sql541774","sql541774","password"); 
      String sql="Select * from messanger"; 
      Statement stm=(Statement) con.createStatement(); 
      ResultSet rs=stm.executeQuery(sql); 
      textmess.setText(""); 

      while(rs.next()){ 

       String sc=rs.getString(2); 
       String sc1=rs.getString(3); 
       String sc2=rs.getString(4); 
      } 

      rs.close(); 
      stm.close(); 
      con.close(); 

      System.out.print("100%"); 

      } catch(Exception e){ 
      } 
     } 
    } 
}; 

df1.start(); 

它讓我看到輸出

1% 100% 

如何我將能夠得到真正的輸出,如:

1% 2% 3% .........98% 99% 100% 

請幫助我。謝謝。

+0

在for循環中,您給出了條件i <= 1,因此for循環只執行一次。以及爲什麼您的數據庫連接代碼在for循環中? – ravikumar

+0

我正在使用'線程',我認爲循環是必需的。 – user3204934

+0

,我想知道實時sql執行%或整數,它告訴我,我的SQL已執行多少部分 – user3204934

回答

0

第一個:刪除for循環,它沒用。

第二個:你不能這樣做。沒有辦法事先知道您的聲明需要多長時間。這取決於您請求的數據量,網絡速度,在同一時刻執行的其他語句或機器上的其他負載等。

你可以得到的是以下內容(在僞代碼):請求總共有多少行,並逐行獲取。在每一行上,您可以增加加載欄。您可以按照行數拆分加載欄,也可以計算有多少行將爲1%。

int numberOfRows = SELECT COUNT(*) FROM MESSANGER; 
for(i in numberOfRows) 
    row = SELECT * FROM MESSANGER WHERE ID = i 
    print i + " rows from " + numberOfRows + " rows loaded" 
+0

謝謝@Thomas Uhrig – user3204934

+0

但此方法僅適用於選擇查詢而不適用於'update,delete,insert'如何處理。 – user3204934

+0

你也可以爲每一行分別執行'update','delete'和'insert'。但是請注意,這可能會影響你執行SQL時的性能。 –