反馈一个SQLServer的bug

SQLServer版本:2008 R2
JFinal版本:2.2

问题描述:
在数据库中字段为date或datetime时,查询没有任何问题,执行model.save()时出现如下提示:
com.jfinal.plugin.activerecord.ActiveRecordException:com.microsoft.sqlserver.jdbc.SQLServerException: 不支持从 UNKNOWN 到 UNKNOWN 的转换。

不知道到底是JFinal的问题还是Generator的问题
ps:Generator生成的类型为java.util.Date

评论区

张露露

2016-12-14 23:56

已经纠结了一天了,群里不敢@JFinal,只好发到这里>_<

yotop

2016-12-15 09:11

@张露露 小阿迷别闹,老大那么好, 怎么可能不回答,群里发出来啊

JFinal

2016-12-15 10:15

@张露露 这个需要单步调试精确定定位问题,很多不用 sql server,建议去群里问问

这个问题以前没人反馈过,试试换个 jdbc 驱动

张露露

2016-12-15 10:21

@JFinal 若干年前有人解决了 但是没有将解决办法和代码分享粗来 地址http://www.oschina.net/question/98594_226700

JFinal

2016-12-15 10:32

@张露露 关键是这个问题,以前从来没人反馈过,不知道原因,这个是你碰到的?

张露露

2016-12-15 10:51

@JFinal 嗯嗯 com.jfinal.plugin.activerecord.Model这个类里 405行
pst = conn.prepareStatement(sql.toString(), Statement.RETURN_GENERATED_KEYS);
这句被报错了

lyh061619

2016-12-15 14:51

@JFinal 波总好像这个关于日期的问题,好像我曾经有反馈给你过,看源在日期处理这块JFinal只对mysql支持处理得非常,其他的库好像略差不少,哈哈

林新育

2016-12-15 17:18

@张露露 肿么解决的啊,

cnspider

2016-12-17 10:37

群号多少??

张露露

2017-07-09 22:46

@林新育
半年后回来挖坟 自己实现一个MetaBuilder 资料https://www.oschina.net/question/2276614_2147333

张露露

2017-07-09 23:27

cnzzr

2017-10-23 11:33

实体的set属性使用 java.sql.Date 就可以解决此问题,JFinal为 3.2版本

张露露

2018-01-10 17:54

@JFinal 请问3.3这个问题修复了吗

initmo

2018-06-12 12:33

public class CustSqlServerDialect extends SqlServerDialect {
public void fillStatement(PreparedStatement pst, Object... paras) throws SQLException {
for (int i=0; i Object value = paras[i];

if (value instanceof java.sql.Date) {
pst.setDate(i + 1, (java.sql.Date)value);
} else if (value instanceof java.util.Date) {
java.util.Date date = (java.util.Date) value;
pst.setDate(i + 1, new java.sql.Date(date.getTime()));
}
else if (value instanceof java.sql.Timestamp) {
pst.setTimestamp(i + 1, (java.sql.Timestamp)value);
} else {
pst.setObject(i + 1, value);
}
}
}
}
继承扩展一个Dialect,重写 fillStatement 方法,打完收工!

热门反馈

扫码入社