小编Abu*_*kar的帖子

在Joda Time中查看包含日期范围

我正在使用Joda Time 2.1库.

我写了一个方法来比较给定日期是否在日期范围之间.我希望它包含在开始日期和结束日期.LocalDate我使用过,因为我不想考虑时间部分只有日期部分.

下面是它的代码.

isDateBetweenRange(LocalDate start,LocalDate end,LocalDate target){

       System.out.println("Start Date : "
              +start.toDateTimeAtStartOfDay(DateTimeZone.forID("EST"));

       System.out.println("Target Date : "
              +targettoDateTimeAtStartOfDay(DateTimeZone.forID("EST"));

       System.out.println("End Date : "
              +end.toDateTimeAtStartOfDay(DateTimeZone.forID("EST"));

       System.out.println(target.isAfter(start));

       System.out.println(target.isBefore(end));
}
Run Code Online (Sandbox Code Playgroud)

上述方法的输出是:

Start Date: 2012-11-20T00:00:00.000-05:00
Target Date: 2012-11-20T00:00:00.000-05:00
End Date : 2012-11-21T00:00:00.000-05:00
target.isAfter(start) : false
target.isBefore(end) : true
Run Code Online (Sandbox Code Playgroud)

我的问题是target.isAfter(start)假的,即使target日期和start具有相同的值.

我想要,target >= start但这里只考虑target > start.
我希望它具有包容性.

这是否意味着该isAfter方法专门找到匹配?

我已经通过Jav Time的javadoc,但没有找到任何关于它的东西.

java datetime date jodatime

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

java语法:"synchronized(this)"

能告诉我这段java代码吗?我无法理解这种语法.

synchronized (this) {
              try {
                  wait(endTime - System.currentTimeMillis());
              } catch (Exception e) {
              }
}
Run Code Online (Sandbox Code Playgroud)

java syntax synchronized

19
推荐指数
2
解决办法
2万
查看次数

Joda Time - 将Calendar对象转换为LocalDate

我有一个方法getCalendarFromClass,它返回一个对象Calendar.

我正在LocalDate使用fromCalendarFields方法将其转换为Joda Time API .

LocalDate.fromCalendarFields(a.getCalendarFromClass());
Run Code Online (Sandbox Code Playgroud)

但是如何TimeZone在执行此转换时指定,因为我没有在javadoc中找到它.

fromCalendarFields方法的javadoc 提到:

从日历查询每个字段并将其分配给LocalDate.如果您一直使用日历作为本地日期,忽略该区域,这将非常有用.

java timezone datetime jodatime

8
推荐指数
2
解决办法
2万
查看次数

使用Spring的Mock MVC

我看到我周围的人在控制器类的单元测试中使用Spring MVC,这对单元测试的用途没有帮助.

单元测试应该测试你的控制器类的实际实现,这可以通过简单的Junit测试而不是使用Spring Mock MVC更准确地实现.

但问题出现了,那么Spring Mock MVC的实际用途是什么呢?你需要什么?

假设我有以下代码:

@Controller
@RequestMapping("/systemusers")
public class SystemUserController
{
    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public String getUser(final Model model)
    {

        // some logic to return user's details as json

        return UserDetailsPage;
    }
 }
Run Code Online (Sandbox Code Playgroud)

我可以使用Junit比使用Spring Mock MVC更准确地测试这个类/控制器(它所做的只是生成一些可以用junit声明的json).

我也可以使用Spring Mock MVC测试,就像使用正确的端点返回正确的HTTP状态和正确的响应页面字符串一样.

但这是不是意味着我们正在测试Spring MVC的功能而不是测试方法的实际代码?

PS:我把代码保持在最低限度,我认为足以解释我的问题.假设没有编译错误.

java junit spring mockmvc

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

刷新时如何防止重复输入?

我有一个index.jsp页面,我有一个表单,用户输入一些数据,使用Controller servlet存储在数据库中.

我想index.jsp在数据库中输入数据后显示与该表单相同的页面().此外,我想显示用户在数据库中输入的所有条目.

我试过用的forward()方法RequestDispatcher.它工作正常(意味着我能够再次显示相同的表单,并使用JSTL显示该用户在表单下输入的所有数据).

但问题是每当用户按下Refresh or F5按钮时,所有先前的数据也会输入到数据库中,并且当我显示所有数据时,也会出现重复的条目.

我想过使用POST-REDIRECT-GET模式,但问题是当我重定向时我没有使用JSTL显示这些数据.

我该怎么做?

html java jsp servlets post-redirect-get

6
推荐指数
2
解决办法
7932
查看次数

PHP Memcached总是返回0

memcache(安装在php5上)和memcached(通过libmemcached安装在php7.2上)都连接到同一个memcached daemon/server.

Memcache::get完全正常,并按照我的期望获取数据.但是当我这样做时Memcached::get,它总是返回0.

我已经检查过使用这两个扩展时我已经压缩了.我也尝试在Memcached::OPT_BINARY_PROTOCOLfor 之间切换memcached,它仍然产生相同的null结果.

有趣的是,当我使用memcached扩展添加键/值对并使用相同的键检索时,我得到了我添加的正确/正确的值.

我现在无能为力,因为它不适用于已经存储在memcached服务器中的数据.

编辑1:我确实telnet到我的memcached服务器,并检查它实际上有值.另外,我检查了返回的结果代码Memcached::getResultCode是不是任何一种失败.

编辑2:我可能会进一步缩小范围.我注意到,当我["key1" => "value1"]memcache-php5脚本中保存时,它会正确地存储和检索数据.但是当我尝试使用memcached-php7.1脚本检索相同的数据时,它返回0.

之后,我使用telnet从memcached服务器中删除了密钥"key1"的数据.然后我["key1" => "value1"]使用memcached-php7.1脚本保存,它可以正确检索数据.但是当尝试使用memcache-php5脚本检索它时,它会返回一些序列化数据"a:1:{s:4:\"key1\";s:6:\"value1\";}"(这是json_encoded输出)

因此,为了升级,我可能必须删除/刷新所有内容并使用memcached扩展在memcached服务器中重新创建条目.

PS:我知道这两个PHP扩展之间的差异.我已经阅读了关于这个问题的所有评论,不是我的重复.

php memcached libmemcached

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

如果 PDO 和 mysqli 不可用,使用 mysql_* 函数是否安全?

我在共享主机上托管了一个网站。他们安装了 php 5.2.13。

我知道 SQL 注入的漏洞,我想阻止它。

所以我想使用 PDO 或 mysqli 来防止它。

但是问题是我phpinfo();以前查看宿主环境php设置信息的时候,
发现PDO没有mysql驱动,里面也不支持mysqli。

所以我想知道使用旧的 mysql_* 函数(以及类似的函数mysql_real_escape_string)是否安全。

我在 SO 上看过这个,但对我没有多大帮助。 当 mysqli 和 PDO 不可用时,准备好的语句可能吗?

更新:

我忘了提到大多数查询都很简单。没有使用表单,因此不会使用用户输入进行查询。所有查询都将使用必要的参数进行硬编码,并且一旦设置就不会更改。

php mysql mysqli pdo sql-injection

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

catch块中无法识别UnknownHostException

我的代码中的一个方法抛出UnknownHostException异常

我第一次有这样一个catch块:

catch (Exception e) {
  // TODO Auto-generated catch block
  System.out.println("Custom Message "+e.getMessage());
  if(e instanceof java.net.UnknownHostException){
      System.out.println("Unknown Host Ex");
  }else{
      System.out.println("OTHER ERROR");
  }
}
Run Code Online (Sandbox Code Playgroud)

我面临的问题是,该if条件永远不会评估为真,因此我无法输出有一些主机错误.

你可以看到我sysout之前有一个打印这个:

Custom Message ; nested exception is: 
    java.net.UnknownHostException: abc.xyz
Run Code Online (Sandbox Code Playgroud)

在那之后我写了一个单独的catch块来处理,UnknownHostException但仍然没有被抓住.

java exception-handling exception

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

方法重载并传递null

我在类中重载了以下两种方法:

public class Test{

  public static void main(String []args) throws ParseException{
       Test t = new Test();
      t.testMethod(null);
  }

  public void testMethod(Object o){
    System.out.println("Object");
  }

  public void testMethod(String s){
    System.out.println("String");
  }
}
Run Code Online (Sandbox Code Playgroud)

当我调用该方法时,testMethod它会打印"String".

当我再添加一个重载方法时:

public void testMethod(StringBuilder sb){
    System.out.println("String");
}
Run Code Online (Sandbox Code Playgroud)

它抛出了编译器错误:The method testMethod is ambigous for type Test..

所有这些都发生在我调用方法时 null

我的问题是:

  1. 为什么它打印String而不是Object?
  2. 为什么添加第三种方法会出现编译错误?

java null overloading

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

奇怪的Oracle连接URL

我们的一位客户正在尝试使用以下JDBC URL连接到Oracle数据库:

jdbc:oracle:thin:@(DESCRIPTION=(FAILOVER=ON)LOAD_BALANCE=OFF)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=server1.domain.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=server2.domain.com)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=FOO))) 
Run Code Online (Sandbox Code Playgroud)

他们得到这个错误:

Caused by: oracle.net.ns.NetException: NL Exception was generated
    at oracle.net.resolver.AddrResolution.resolveAddrTree(AddrResolution.java:614) ~[ojdbc5_11g-11.2.0.1.0.jar:11.2.0.1.0]
    at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:411) ~[ojdbc5_11g-11.2.0.1.0.jar:11.2.0.1.0]
    at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:672) ~[ojdbc5_11g-11.2.0.1.0.jar:11.2.0.1.0]
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:237) ~[ojdbc5_11g-11.2.0.1.0.jar:11.2.0.1.0]
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042) ~[ojdbc5_11g-11.2.0.1.0.jar:11.2.0.1.0]
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301) ~[ojdbc5_11g-11.2.0.1.0.jar:11.2.0.1.0] 
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 我之前从未见过这样的连接URL.它看起来更像是TNSNAMES.ORA中的一个条目.如何找出此连接字符串的含义?

  2. 什么可能导致这个无用的错误消息?

java oracle jdbc

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