jfinal oracle date

lamian 发布于 2015/09/22 21:27
阅读 461
收藏 0

@JFinal 你好,想跟你请教个问题:

我往oracle数据库里插入数据的时候,类型是DATE类型的老是报错

用下面的方法

record.set("shijian",new java.sql.Timestamp(new Date().getTime()))

也不行,请问怎么解决呢?谢谢

Jfinal 1.9

加载中
0
JFinal
JFinal
   具体报什么错误,贴出详细异常信息
JFinal
JFinal
回复 @lamian : 推测你的字段 "shijian" 为字符串类型,Timestamp 无法插入
lamian
lamian
我debug之后record里面的信息是修改之后的日期,但是我执行 boolean flag=Db.update("clxx", record); 报错 com.jfinal.plugin.activerecord.ActiveRecordException: java.sql.SQLException: ORA-01861: 文字与格式字符串不匹配
0
lamian
lamian

引用来自“JFinal”的评论

   具体报什么错误,贴出详细异常信息
我debug的时候update的时候执行的是OracleDialect中的 public void fillStatement(PreparedStatement pst, Object... paras) throws SQLException {
for (int i=0; i<paras.length; i++) {
Object value = paras[i];
if (value instanceof java.sql.Date)
pst.setDate(i + 1, (java.sql.Date)value);
else if (value instanceof java.sql.Timestamp)
pst.setTimestamp(i + 1, (java.sql.Timestamp)value);
else
pst.setObject(i + 1, value);
}
}
我在代码里面

record.set(paraname, new java.sql.Timestamp(d.getTime()));

因为上面的Object value = paras[i];

是不是把我转换的Timestamp类型直接转成object然后不识别Timestamp类型了

然后直接走的就是最下面的
pst.setObject(i + 1, value);
lamian
lamian
已解决,谢谢
JFinal
JFinal
再仔细调试一下,record.set(...) 时明明用的 Timestamp,而在 fillStatment 中并没有走 else if (value instanceof java.sql.Timestamp 这个分支,很明显中途有过什么变故
0
lamian
lamian

引用来自“lamian”的评论

引用来自“JFinal”的评论

   具体报什么错误,贴出详细异常信息
我debug的时候update的时候执行的是OracleDialect中的 public void fillStatement(PreparedStatement pst, Object... paras) throws SQLException {
for (int i=0; i<paras.length; i++) {
Object value = paras[i];
if (value instanceof java.sql.Date)
pst.setDate(i + 1, (java.sql.Date)value);
else if (value instanceof java.sql.Timestamp)
pst.setTimestamp(i + 1, (java.sql.Timestamp)value);
else
pst.setObject(i + 1, value);
}
}
我在代码里面

record.set(paraname, new java.sql.Timestamp(d.getTime()));

因为上面的Object value = paras[i];

是不是把我转换的Timestamp类型直接转成object然后不识别Timestamp类型了

然后直接走的就是最下面的
pst.setObject(i + 1, value);
SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd");
try {
Date d = sdf.parse(object.toString());
System.out.println(new java.sql.Timestamp(d.getTime()));
record.set(paraname, new java.sql.Timestamp(d.getTime()));
} catch (ParseException e1) {
// TODO Auto-generated catch block

e1.printStackTrace();

我打印出来的结果   2015-03-21 00:00:00.0 很标准的Timestamp

record.set()这个方法也成功执行过去了

就是到最后update的时候老是不成功

数据库里的paraname字段是  DATE类型

0
lamian
lamian

引用来自“lamian”的评论

引用来自“JFinal”的评论

   具体报什么错误,贴出详细异常信息
我debug的时候update的时候执行的是OracleDialect中的 public void fillStatement(PreparedStatement pst, Object... paras) throws SQLException {
for (int i=0; i<paras.length; i++) {
Object value = paras[i];
if (value instanceof java.sql.Date)
pst.setDate(i + 1, (java.sql.Date)value);
else if (value instanceof java.sql.Timestamp)
pst.setTimestamp(i + 1, (java.sql.Timestamp)value);
else
pst.setObject(i + 1, value);
}
}
我在代码里面

record.set(paraname, new java.sql.Timestamp(d.getTime()));

因为上面的Object value = paras[i];

是不是把我转换的Timestamp类型直接转成object然后不识别Timestamp类型了

然后直接走的就是最下面的
pst.setObject(i + 1, value);
已经解决了,谢谢
Role
Role
分享下解决方案,同时也可以把方案反馈给@JFinal的呀!
JFinal
JFinal
具体怎么解决的呢? 分享出来吧
返回顶部
顶部