我有循环遍历描述需要存储在 MySQL 数据库中的信息的对象队列的代码。我最近稍微更改了代码以关闭整个应用程序中 finally block 中的连接,这样我们就不会在发生异常时泄漏任何内容。它工作得很好,除了:
有些用户有时会看到错误 No operations allowed after resultset closed - 我知道这个错误是什么意思,但我不知道如何关闭它。
违规代码:
PreparedStatement s = null;
Connection conn = null;
try {
if( !queue.isEmpty() ){
conn = Prism.dbc();
if(conn == null || conn.isClosed()){
return;
}
conn.setAutoCommit(false);
s = conn.prepareStatement("INSERT query goes here");
int i = 0;
while (!queue.isEmpty()){
Handler a = queue.poll();
if( a == null || a.isCanceled() ) continue;
// .. value setting code here
s.addBatch();
if ((i + 1) % perBatch == 0) {
s.executeBatch(); // Execute every x items.
}
i++;
}
s.executeBatch();
conn.commit();
}
} catch (SQLException e) {
// error logging code
} finally {
if(s != null) try { s.close(); } catch (SQLException e) {}
if(conn != null) try { conn.close(); } catch (SQLException e) {}
}
错误指向 conn.setAutoCommit(false); 行。但是,此时我看不到如何关闭连接,因为我正在明确检查它上方的关闭/空连接。
最佳答案
我在堆栈跟踪中发现的核心问题是:
2013-03-31 13:21:11 [严重] 由:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException 引起:从服务器成功接收的最后一个数据包是 30,491,788 毫秒前。最后一个成功发送到服务器的数据包是在 30,491,788 毫秒之前。比服务器配置的“wait_timeout”值长。在您的应用程序中使用之前,您应该考虑过期和/或测试连接有效性,增加服务器配置的客户端超时值,或使用连接器/J 连接属性“autoReconnect=true”来避免此问题。
调用 Prism.dbc(); 时获得的连接实际上是来自连接池的连接;在这种特定情况下,合并的连接断开。它表示池中的 JDBC 连接与数据库之间的通信已超过 8 小时未成功。可能是因为在数据库服务器上定义的上述 wait_timeout 或防火墙断开了连接或其他原因;连接中断可能有多种原因。
您应该按照异常提出的建议来解决这个问题。
关于java - 关闭连接后没有操作,绕过我对关闭连接的检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15730889/
我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案