java.sql.Date无法转换为java.lang.String问题求助
解决java.sql.Date转String的类型转换异常问题
问题场景
执行checkManualResult函数时,以下代码行抛出类型转换异常:
String date = (String) qcModel.getValueAt(row, QCManualResultsTableModel.QCManualResult.RUNDATE_INDEX);
对应的核心堆栈错误:
java.lang.ClassCastException: java.sql.Date cannot be cast to java.lang.String at org.css.QCApproval.QCUtil.checkManualResult(QCUtil.java:88)
原因
qcModel.getValueAt返回的是java.sql.Date类型实例,无法直接强制转换为String类型,必须通过日期格式化或对象自身的字符串转换方法处理。
解决方案
方案1:直接调用toString()方法
java.sql.Date的toString()方法默认返回yyyy-mm-dd格式的字符串,实现简单:
// 先转为java.sql.Date类型 java.sql.Date dateObj = (java.sql.Date) qcModel.getValueAt(row, QCManualResultsTableModel.QCManualResult.RUNDATE_INDEX); // 转为字符串 String date = dateObj.toString();
方案2:自定义日期格式(使用SimpleDateFormat)
如果需要特定格式(如yyyy/MM/dd),可以用SimpleDateFormat灵活控制输出:
java.sql.Date dateObj = (java.sql.Date) qcModel.getValueAt(row, QCManualResultsTableModel.QCManualResult.RUNDATE_INDEX); SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy/MM/dd"); String date = dateFormatter.format(dateObj);
注意:
SimpleDateFormat是非线程安全类,多线程环境下需避免共享实例,建议每个线程单独创建或使用线程安全的替代类。
方案3:Java 8+ 推荐使用DateTimeFormatter
Java 8及以上版本,建议使用java.time包的线程安全类处理日期转换:
java.sql.Date dateObj = (java.sql.Date) qcModel.getValueAt(row, QCManualResultsTableModel.QCManualResult.RUNDATE_INDEX); // 转为LocalDate LocalDate localDate = dateObj.toLocalDate(); // 自定义格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); String date = localDate.format(formatter);
将上述任意方案替换原代码中的强转逻辑,即可解决该类型转换异常。
内容的提问来源于stack exchange,提问作者WindBreakerKid
相关产品推荐
相关产品推荐

