Talend tMap读取CSV至SQL Server时遇NullPointerException问题排查
解决CSV导入SQL Server时的NullPointerException问题
兄弟,你的问题根源出在空值检查的顺序和写法上!你写的row2.Acq_date.equals(null)这部分是致命的——如果row2.Acq_date本身就是null,调用equals(null)直接就会抛出NullPointerException,根本轮不到后面的row2.Acq_date == null判断。这就是为什么你调试时发现空值检查总是判定为false,因为null场景下代码直接报错跳过去了,根本没执行到后面的判断逻辑。
给你修正后的空值检查表达式,直接替换原来的代码就行:
(row2.Acq_date == null || row2.Acq_date.trim().isEmpty()) ? null : (int) TalendDate.diffDate(TalendDate.getCurrentDate(), row2.Acq_date, "MM")
我来拆解下调整的关键点:
- 把
row2.Acq_date == null放在最前面:这样如果对象是null,直接就会返回true,不会执行后面的字符串方法,从根源避免空指针。 - 用
trim().isEmpty()替代equals(""):能同时处理空字符串和全空格的情况(CSV里经常会出现单元格是空格而非空字符串的情况,这种也应该视为空值)。 - 删掉
equals(null):这个写法完全没必要,判断对象是否为null直接用==就够了,equals(null)永远返回false,还会在对象为null时抛异常,纯粹是给自己挖坑。
额外给你两个调试小建议:
- 调试时可以单独打印
row2.Acq_date的实际值,确认它到底是null、空字符串还是其他空白字符,方便你排查问题。 - 如果CSV里的日期格式不规范,就算过了空值检查,
TalendDate.diffDate也可能报错,建议后续可以加一层日期格式有效性的验证。
内容的提问来源于stack exchange,提问作者Ted
相关产品推荐
相关产品推荐

