如何为executeUpdate()创建JProgressBar

时间:2014-03-08 17:09:26

标签: java prepared-statement teradata jprogressbar

我的小应用程序将表上传到数据库。

Connection ....   
   ... 
   ...
PreparedStatement ps  ... 
ps.executeUpdate() ; // this takes a while so I want to create a progress bar

如何跟踪ps.executeUpdate()的进度?任何人都可以发布一个java代码吗?我需要创建进度条

(我的数据库是Teradata)

2 个答案:

答案 0 :(得分:1)

有几种可能性来显示“正在发生的事情”。但问题是,数据库语句中没有进度指示器或侦听器。

“无法直接跟踪数据库管理系统的进展。”关于这一点,我被另一个回答者纠正了。因此,有可能跟踪进度,但这些是非常特定于数据库的。因此,如果您只考虑TeraData,这也是一种方法。

所以这里有一些其他的可能性来产生某种过程反馈:

  • 以多个步骤(n)切片更新(如果可能)。你知道你必须走多少步,这将是你的百分之百。每一步都应该将进度条增加100 / n%。

  • 这种SQL分割并不总是一种方法。因此,您可以显示正在进行的工作指示器(不确定的)。

  • 您可以猜测在该值上处理和构建进度条的时间,就像Windows在文件副本上所做的那样。

在每种情况下,您的数据库处理都应该发生在工作线程中(与EDT不同),但是您肯定知道这一点。

答案 1 :(得分:1)

您可以使用SQL来利用性能监视器和性能控制(PMPC)Open API来监视会话的进度,因为它在Teradata 13及更高版本中执行SQL语句。

为用户运行的所有会话获取已完成的步骤,主持人,RunVProcNo

SELECT HostID
     , RunVProcNo
     , ReqStepsCompletedCnt
FROM TABLE(MonitorSession(-1,'{username}',  0)) AS T2;

您始终可以通过运行以下命令获取给定连接的当前会话:

SELECT SESSION;

使用会话号码,您可以隔离上一次MonitorSession()呼叫返回的记录数。

获取正在执行的SQL的步骤总数:

SELECT MAX(StepNum) AS TotalNumSteps
  FROM TABLE(MonitorSQLSteps({Host},{Session},{RunVProcNo)) AS T1;

使用这两个语句,您应该能够跟踪在应用程序中更新进度条的进展情况。 `