请考虑以下代码
ResultSet rs = null;
Statement st = null;
try {
//do somehting
} catch (Exception e){
//do something
} finally {
if(st != null){
try {
st.close();
} catch (SQLException e) {
log.error("Exception while closing statement: " + e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是当我们关闭语句时,它是否会关闭结果集,或者我们是否需要显式关闭结果集
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
log.error("Exception while closing result set: " + e);
}
}
Run Code Online (Sandbox Code Playgroud)
我认为关闭语句将自动关闭结果集,但如果我没有显式关闭结果集,则FindBugs会抛出以下警告
此方法可能无法清除java.sql.ResultSet
我有以下代码
try{//do something
}
catch (Exception e) {
log.error(e, e);
if (e instanceof RuntimeException) {
throw (RuntimeException) e;
} else {
throw new RuntimeException(e);
}
}
Run Code Online (Sandbox Code Playgroud)
findbugs stataic分析工具会抛出此警告
对于methodX中的所有非空值,instanceof将始终返回true,因为所有RuntimeException都是RuntimeException的实例
我不明白的是它的异常被捕获而不是RuntimeException,为什么这个警告呢?
我在测试期间使用模块Sub :: Override来模拟子程序.我实际上正在测试一个名为sub_a的子程序.sub_a正在调用另一个子例程sub_b来做一些工作.sub_b实际上是通过ssh连接执行一些命令,我想在我的测试模式下进行模拟.所以我使用sub :: override来模拟sub_b.
sub_a{
...
sub_b(arg1, arg2)
}
Run Code Online (Sandbox Code Playgroud)
在我的测试代码中,我像这样覆盖它
my $override_sshCommand = override_sub( 'package::filename::sub_b', sub ($$) { return "success"; }, undef );
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,如果sub_b和sub_a属于同一个类,则覆盖成功.否则覆盖不起作用.我可以通过在从sub_a调用时使用sub_b的完全限定名来解决此问题
sub_a{
...
package::filename::sub_b(arg1, arg2);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码修复了问题,覆盖成功.但我不想这样做,因为我没有拥有该代码,而且它看起来很难看.还有其他解决方案吗?
我正在构建一个客户端 - 服务器应用程序,我必须实现一个keepalive机制,以检测客户端是否崩溃.我在客户端和服务器端都有单独的线程.客户端线程发送"ping"然后休眠3秒,而服务器读取BufferedInputStream并检查是否接收到ping,如果是,则使ping计数器等于零,否则它将计数器递增+1,服务器线程然后休眠持续3秒,如果ping计数器达到3,它会将客户端声明为已死.
问题是,当服务器读取输入流时,它是一个阻塞调用,并且它会一直阻塞,直到收到下一个ping,无论它有多延迟,所以服务器永远不会检测到错过的ping.
任何建议,以便我可以读取流的当前值,如果传入流上没有任何内容,它不会阻止.
谢谢,
我在办公室里有一个桌面,我经常需要从家里访问并使用scp来复制文件.目前我这样做
scp username@x.x.x.x ...
Run Code Online (Sandbox Code Playgroud)
我想要一种机制,我每次想要scp的时候都没有输入IP地址.我试图通过创建一个别名来实现它,但它似乎不起作用.我可以给我的台式机命名,这样我可以使用机器名称而不是输入IP地址吗?
我想在perl中为子程序编写单元测试.子例程使用多个线程来完成其任务.因此,它首先创建一些线程然后等待它们加入.
问题是我们的单元测试在无法运行多线程测试的服务器上运行,因此我需要以某种方式模拟线程行为.基本上我想覆盖线程创建和连接函数,使其不再是线程.任何指针如何做到这一点并测试代码?
编辑:服务器无法运行线程代码,原因如下:
Devel :: Cover还没有使用线程
我是Perl的新手.我正在尝试编写一个Perl脚本,它打印目录中所有文件的内容,并递归执行,直到打印目录/子目录中的所有文件.我正在使用以下子程序.
sub print_files_in_dir {
my $file = shift;
if(-d $file){
my @files=glob "$file/*";
foreach my $file (@files){
if(-d $file){
print_files_in_dir $file;
}
else {
print_file $file;
}
}
else {
print_file $file;
}
}
Run Code Online (Sandbox Code Playgroud)
其中print_file是sub,用于打印单个文件的内容.我得到这个错误,我试图用一个名为dir1的目录执行此代码,该目录包含另一个名为dir2的目录.
无法通过包"dir1/dir2"找到对象方法"print_files_in_dir"(也许你忘了加载"dir1/dir2"?)
无法弄清楚为什么会抛出这个错误?
我一直在尝试将以下代码转换为使用'test'而不是'if'
if [ -e ./blah ] && [ ! -L ./blah ];
then
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
我的意图是使用测试代替,这样我就不必明确地退出1.我正在尝试这样的事情:
test -e ./blah && ! -L ./blah;
Run Code Online (Sandbox Code Playgroud)
而不是&&,我尝试过-a,使用不同的支架组合,但我没有成功.我相信应该有一个简单的方法来做到这一点.谁能帮我 ?
我有这段代码
my $time_start = time;
sleep 5;
my $time_diff = time - $time_start;
print "time elapsed: $time_diff";
Run Code Online (Sandbox Code Playgroud)
代码大多按预期打印5,但有时打印4.有可能导致这种情况?是睡眠是罪魁祸首,还是时间本身的测量方法有时会导致精确度不高的问题?
perl ×4
java ×3
shell ×2
unit-testing ×2
bash ×1
inputstream ×1
jdbc ×1
keep-alive ×1
sleep ×1
sql ×1
time ×1
unix ×1