2014-06-12 37 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时的性能。 –