You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:00:19