【问题标题】:How to create JProgressBar for executeUpdate()如何为 executeUpdate() 创建 JProgressBar
【发布时间】:2014-04-11 21:59:47
【问题描述】:

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

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

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

(我的数据库是 Teradata)

【问题讨论】:

  • 你的数据库的日志。
  • 谢谢。你能发布任何java代码来获取日志数据吗?
  • 这是不可能的。数据库不会告诉你它有多远。
  • 在这个论坛上javakey.net/4-java-gui/f20262e7348dcbcf.htm 一个说不可能,另一个说有可能

标签: java prepared-statement teradata jprogressbar


【解决方案1】:

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

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

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

  • 将您的更新分成多个步骤 (n)(如果可能的话)。你知道你必须走多少步,那将是你的 100%。每一步都应将进度条增加 100%。

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

  • 您可以猜测处理时间并在该值上构建进度条,就像 windows 对文件复制所做的那样。

在任何情况下,您的数据库处理都应该在工作线程中进行(不同于 EDT),但您肯定知道这一点。

【讨论】:

    【解决方案2】:

    在 Teradata 13 及更高版本中,您可以利用性能监视器和性能控制 (PMPC) 开放 API 来监控会话的进度,因为它执行 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;
    

    通过这两个语句,您应该能够跟踪某些事情的进展情况,以更新应用程序中的进度条。 `

    【讨论】:

    • 我不知道这种低级别的可能性。但这是您确实会建议的,还是您只是向我们展示了这种可能性?
    • Viewpoint环境使用PMPC API来获取相同的信息,对数据库环境的影响很小。如果相关环境的 DBA 批准您开发的解决方案,那么它完全有可能在生产环境中运行。关键是要以合理的时间间隔轮询数据库以了解被监控的工作类型。例如,监视临时查询的间隔为 60 秒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多