【问题标题】:Why @jdbc query fails with connection timeout?为什么@jdbc 查询因连接超时而失败?
【发布时间】:2016-03-07 22:07:09
【问题描述】:

这是我在 DB2 表中插入行的代码:

for(i=0; i<1000000; i++){
    var myData = {
        USERNAME:   "user1",
        SOMEID:     i
    };
    @JdbcInsert("db2", "MYTABLE", myData);
} 

在某些时候它会因为这个错误而失败:

Error while executing JavaScript action expression
Script interpreter error, line=211, col=22: Error while executing function '@JdbcInsert'
Error while creating connection
Time expired getting a connection (=10000 ms). Try again.

我发现没有办法控制 JDBC 驱动程序超时。我错了吗? 或者我应该放类似的东西

java.lang.Thread.sleep(1000);

在每个@JdbcInsert 语句之前?

【问题讨论】:

  • 我认为你可以更改服务器超时时间。
  • 但是,10 秒应该足以创建连接,在大多数情况下应该会快得多。

标签: java jdbc xpages


【解决方案1】:

为什么添加Thread.sleep(1000) 可以解决您的问题?这里的问题是您希望将 1,000,000 条记录插入到 DB2 中,连接超时为 10 秒。

您需要:A) 增加连接超时时间或 B) 一次插入更少的记录(即插入 10k 或 100k 条记录然后获得新连接)

显然 A 听起来是这里最好的解决方案,因为 B 只是增加了获得额外连接的更多开销。

【讨论】:

  • 我没有建立任何连接。只有一个 JavaScript 命令 @Jdbcinsert 可以插入一条记录。它不是纯 Java,您可以控制一切。如果我可以一次插入多条记录,问题将得到解决。但是这个问题仍然悬而未决stackoverflow.com/questions/23768736/…
  • 对,如果您使用选项 B,您将不得不使用除 @Jdbcinsert 之外的其他机制(即更细粒度的东西,实际上允许您控制连接)
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多