学习用项目,
从数据库查询的记录赋值给list,并通过CollectionUtils.isNotEmpty判断是否为空,但提示 java.lang.NullPointerException: null。
基础技术问题,拍砖请轻点。
public int process(String fileUrl, String dateStr) throws IOException, ParseException {
String minSerialno = "";
int size = 100;
int totalCount = 0;
String fromDate = DateUtils.changeFormat(dateStr, DateUtils.STYLE_yyyyMMdd, DateUtils.STYLE_SIMPLE_DATE);
String toDate = DateUtils
.getDate(DateUtils.addDay(DateUtils.stringToDate(fromDate, DateUtils.STYLE_SIMPLE_DATE), 1), DateUtils.STYLE_SIMPLE_DATE);
logger.info("fromDate{},toDate{}", fromDate,toDate);
// writeHeadToFile(fileUrl);
List<AdmFiveClassApplyTransactionRecordEntity> tradeRecords;
while (CollectionUtils.isNotEmpty(tradeRecords = fiveClassApplyTransactionRecordMapper.selectFiveClassRecordsSecond(minSerialno, size, fromDate, toDate))) {
writeToFile(fileUrl, tradeRecords, true);
minSerialno = tradeRecords.get(tradeRecords.size() - 1).getSerialno();
totalCount += tradeRecords.size();
}
return totalCount;
}
函数selectFiveClassRecordsSecond(minSerialno, size, fromDate, toDate)定义如下:
/**
* 获取五级分类调整记录
*
* @param minSerialno
* @param size
* @param fromDate
* @param toDate
* @return
*/
List<AdmFiveClassApplyTransactionRecordEntity> selectFiveClassRecordsSecond(@Param("minSerialno") String minSerialno, @Param("size") int size, @Param("fromDate") String fromDate, @Param("toDate") String toDate);
mapper.xml定义如下:
<select id="selectFiveClassRecordsSecond" resultMap="BaseResultMap">
select *
from adm_five_class_apply_transaction_record
<where>
adjust_status = '1'
<if test="minSerialno != null and serialNo != ''">
and serialno > #{minSerialno, jdbcType=VARCHAR}
</if>
<!-- <if test="fromDate != null and fromDate != ''">-->
<!-- and submit_time >= #{fromDate,jdbcType=TIMESTAMP}-->
<!-- </if>-->
<!-- <if test="toDate != null and toDate != ''">-->
<!-- and submit_time < #{toDate,jdbcType=TIMESTAMP}-->
<!-- </if>-->
</where>
order by serialno asc limit #{size}
</select>
代码执行报错,提示scheduled task java.lang.NullPointerException: null
2022-04-01 at 17:13:00 CST ERROR org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler 95 handleError - Unexpected error occurred in scheduled task java.lang.NullPointerException: null
at cn.webank.eacds.task.ExportFiveClassRecordTask.process(ExportFiveClassRecordTask.java:94) ~[main/:?]
at cn.webank.eacds.task.ExportFiveClassRecordTask.handleExecute(ExportFiveClassRecordTask.java:75) ~[main/:?]
at cn.webank.eacds.task.ExportFiveClassRecordTask.execute(ExportFiveClassRecordTask.java:56) ~[main/:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_91]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_91]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_91]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_91]
at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) ~[spring-context-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93) ~[spring-context-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_91]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_91]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_91]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[?:1.8.0_91]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[?:1.8.0_91]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[?:1.8.0_91]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_91]
空值时应该能够正常处理才对。
报错信息已经提示了 报错的文件和行号
ExportFiveClassRecordTask.java:94
代码截图都没有显示这个行号 看看ExportFiveClassRecordTask.java 的第 94行 这行报空指针呢?
打断点,debug模式走一下,看下tradeRecords这个集合是否为null,导致调用tradeRecords.get(tradeRecords.size() - 1).getSerialno();和tradeRecords.size()方法时出错