我的小应用程序将表上传到数据库。
Connection ....
...
...
PreparedStatement ps ...
ps.executeUpdate() ; // this takes a while so I want to create a progress bar
如何跟踪ps.executeUpdate()
的进度?任何人都可以发布一个java代码吗?我需要创建进度条
(我的数据库是Teradata)
答案 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;
使用这两个语句,您应该能够跟踪在应用程序中更新进度条的进展情况。 `