我在使用java.sql.Date.valueOf(java.lang.IllegalArgumentException)和使用Integer.parseInt(java.lang.NumberFormatException)的整数解析日期时遇到问题.
我有一个表单,要求使用条形码编号,日期和日期使用HTML5和Chrome,这将连接到后台的PostgreSQL数据库,返回带有项目的表格.当指定所有3个时,这非常有效.
但是,我希望用户能够仅使用条形码进行搜索,因此返回所有相关条目,无论日期是什么.同样,只使用日期来获取指定日期之间的任何条目.
这是我的表格:
<th><input type="text" name="barcode" size="20"></th>
<th><input type="date" name="dateFrom"></th>
<th><input type="date" name="dateTo"></th>
<th><input type="submit" value="Submit" /></th>
Run Code Online (Sandbox Code Playgroud)
现在,我理解解析函数不喜欢空值,为此我使用了一个If语句来检查空值并赋值:
Date dateFrom;
String stringDateFrom = request.getParameter("dateFrom");
if (stringDateFrom == null){
dateFrom = Date.valueOf(LocalDate.MIN);
} else {
dateFrom = Date.valueOf(stringDateFrom);
}
Run Code Online (Sandbox Code Playgroud)
我的理解是If语句检查语句是否为True,如果是,则处理代码并退出,如果语句为False,则跳转到"else"部分并处理其代码.因此,如果我没有为表单中的dateFrom字段输入值,则String'stringDateFrom'将为null,因此If语句的第一部分应该运行并跳过第二部分.
这种情况不会发生,即使是'stringDateFrom'的空值我在If语句的下面一行得到错误'java.lang.IllegalArgumentException',我认为应该跳过它?
dateFrom = Date.valueOf(stringDateFrom);
Run Code Online (Sandbox Code Playgroud)
我得到错误'java.lang.NumberFormatException'与完全相同的设置,但解析一个整数,代码行是;
barcode = Integer.parseInt(stringBarcode);
Run Code Online (Sandbox Code Playgroud)
这是我的解析代码或我的if语句代码吗?
对不起,很长的帖子,我是学生,这是我项目的一部分,我不是贸易的java程序员;-)
感谢您的帮助.
编辑:解决了
感谢unholysampler让我指向正确的方向.问题是setParameter返回一个空的String作为null,因此从未满足条件.
我更改了代码以检查空字符串,或者不是空字符串,它可以工作,即
if (stringDateFrom == null) 至 if (stringDateFrom.equals(""))
和
if (stringBarcode != null) 至 if (!stringBarcode.equals(""))
感谢你的帮助.
编辑:Stacktrace
'java.sql.Date.valueOf(Date.java:143)'中的行是指代码;
if (d == null) {
throw new java.lang.IllegalArgumentException(); …Run Code Online (Sandbox Code Playgroud)