小编com*_*ose的帖子

在Java SQL中自动关闭结果集

请考虑以下代码

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

java sql jdbc

3
推荐指数
1
解决办法
3294
查看次数

在Java中处理运行时异常

我有以下代码

 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,为什么这个警告呢?

java exception-handling

3
推荐指数
2
解决办法
2803
查看次数

Perl Sub :: Override的命名问题

我在测试期间使用模块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)

上面的代码修复了问题,覆盖成功.但我不想这样做,因为我没有拥有该代码,而且它看起来很难看.还有其他解决方案吗?

perl unit-testing

3
推荐指数
1
解决办法
105
查看次数

用Java实现keepalive

我正在构建一个客户端 - 服务器应用程序,我必须实现一个keepalive机制,以检测客户端是否崩溃.我在客户端和服务器端都有单独的线程.客户端线程发送"ping"然后休眠3秒,而服务器读取BufferedInputStream并检查是否接收到ping,如果是,则使ping计数器等于零,否则它将计数器递增+1,服务器线程然后休眠持续3秒,如果ping计数器达到3,它会将客户端声明为已死.

问题是,当服务器读取输入流时,它是一个阻塞调用,并且它会一直阻塞,直到收到下一个ping,无论它有多延迟,所以服务器永远不会检测到错过的ping.

任何建议,以便我可以读取流的当前值,如果传入流上没有任何内容,它不会阻止.

谢谢,

java inputstream keep-alive

2
推荐指数
1
解决办法
1902
查看次数

在scp中使用别名而不是IP

我在办公室里有一个桌面,我经常需要从家里访问并使用scp来复制文件.目前我这样做

scp username@x.x.x.x  ...
Run Code Online (Sandbox Code Playgroud)

我想要一种机制,我每次想要scp的时候都没有输入IP地址.我试图通过创建一个别名来实现它,但它似乎不起作用.我可以给我的台式机命名,这样我可以使用机器名称而不是输入IP地址吗?

unix shell

2
推荐指数
1
解决办法
873
查看次数

perl如何模拟线程行为

我想在perl中为子程序编写单元测试.子例程使用多个线程来完成其任务.因此,它首先创建一些线程然后等待它们加入.

问题是我们的单元测试在无法运行多线程测试的服务器上运行,因此我需要以某种方式模拟线程行为.基本上我想覆盖线程创建和连接函数,使其不再是线程.任何指针如何做到这一点并测试代码?

编辑:服务器无法运行线程代码,原因如下:

Devel :: Cover还没有使用线程

perl unit-testing

2
推荐指数
1
解决办法
216
查看次数

perl中的递归子例程出错

我是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"?)

无法弄清楚为什么会抛出这个错误?

perl

1
推荐指数
1
解决办法
612
查看次数

在'test'命令中使用多个条件

我一直在尝试将以下代码转换为使用'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,使用不同的支架组合,但我没有成功.我相信应该有一个简单的方法来做到这一点.谁能帮我 ?

bash shell

1
推荐指数
1
解决办法
121
查看次数

Perl睡眠和时间测量

我有这段代码

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 time sleep

1
推荐指数
1
解决办法
1697
查看次数