jfinal 支持 oracle.sql.TIMESTAMP类型吗?

jfinal 支持 oracle.sql.TIMESTAMP类型吗?

异常信息:Exception in thread "main" java.lang.ClassCastException: oracle.sql.TIMESTAMP cannot be cast to java.lang.String



评论区

JFinal

2016-10-12 16:06

先确定数据库是 timestamp 类型,然后 jdbc 才有可能转换成 java.sql.Timestamp 类型

JFinal

2016-10-12 16:06

单步调试一下

合金来了

2016-10-12 16:23

@JFinal 非常感谢你的回复,代码生成器生产的类型是String

public void setDtstamp(java.lang.String dtstamp) {
set("DTSTAMP", dtstamp);
}

public java.lang.String getDtstamp() {
return get("DTSTAMP");
}

合金来了

2016-10-12 16:33

你好,我这个字段是DTSTAMP TIMESTAMP(6) 6位精度

JFinal

2016-10-12 16:46

@合金来了 可能是 jdbc 无法将这种类型转成 java.sql.Timestamp,建议通过继承 BaseModelGenerator 来改造一下生成器

合金来了

2016-10-12 17:41

@JFinal 您好,问题解决了,使用这个类型:oracle.sql.TIMESTAMP,谢谢


public void setDtstamp(oracle.sql.TIMESTAMP dtstamp) {
set("DTSTAMP", dtstamp);
}

public oracle.sql.TIMESTAMP getDtstamp() {
return get("DTSTAMP");
}

JFinal

2016-10-12 17:44

@合金来了 怎么解决的,直接改的数据库类型,还是改的 BaseModel 中的代码?

合金来了

2016-10-13 10:15

您好,改的BaseModel 类里的类型,现在又出现一个问题:手动改BaseModel类型,我再次用代码生成器生成代码后,oracle.sql.TIMESTAMP 类型又变成java.lang.String类型了。

我想修改代码生成器里的模板,在哪里修改?

JFinal

2016-10-13 10:48

@合金来了 为了保持 BaseModel 与数据表一致,每次生成器每次运时都会重新生成 BaseModel,所以 BaseModel 是不能手工去改的

解决办法前面说过了,自建一个public MyBaseModelGenerator extends BaseModel,覆盖掉父类中的 genGetter 与 genSetter 方法,然后再用 MyBaseGenerator 代替原来的 BaseModelGenerator即可

合金来了

2016-10-13 11:52

你好,问题解决了,解决的不完美。

发现:ColumnMeta-json:{"name":"DTSTAMP","javaType":"java.lang.String","attrName":"dtstamp","type":null,"isNullable":null,"isPrimaryKey":null,"defaultValue":null,"remarks":null}


加字段名判断:

protected void genGetMethodName(ColumnMeta columnMeta, StringBuilder ret) {

if(columnMeta.name.contains("STAMP") ||columnMeta.name.contains("DDMSRECEIEVEDATE") ){
String getterMethodName = "get" + StrKit.firstCharToUpperCase(columnMeta.attrName);
String getter = String.format(getterTemplate, "oracle.sql.TIMESTAMP", getterMethodName, columnMeta.name);
ret.append(getter);
}
else {
String getterMethodName = "get" + StrKit.firstCharToUpperCase(columnMeta.attrName);
String getter = String.format(getterTemplate, columnMeta.javaType, getterMethodName, columnMeta.name);
ret.append(getter);
}


}

JFinal

2016-10-13 12:00

@合金来了 通过判断类型来解决是个好办法,慢慢改进就会越来越好

热门反馈

扫码入社