• 主页
  • Oracle 基础和管理
  • Oracle 高级技术
  • Oracle 认证与考试
  • 职位交流

-----------在java中执行SQL的问题,奇怪的ora-01843: not a valid month,100分求助《急》《急》-------------

kbyst 2009-05-19 11:25:09
出错部分的java代码
StringBuffer sqlBuf = new StringBuffer();
sqlBuf.setLength(0);
sqlBuf.append(" SELECT DISP_INF ");
sqlBuf.append(" FROM M_INFO ");
sqlBuf.append(" WHERE DEL_FLG = '0' ");
sqlBuf.append(" AND TO_DATE(DISP_STRT_DT) <= SYSDATE ");
sqlBuf.append(" AND TO_DATE(DISP_CPLT_DT) >= SYSDATE ");

LoginDispRecord record = null;
PreparedStatement pstmt1 = getConn().prepareStatement(sqlBuf.toString());
ResultSet rset = null;

try {
rset = pstmt1.executeQuery(); 这里出错,被catch到错误

while (rset.next()) {
record = new LoginDispRecord();
record.setTextNews(rset.getString("DISP_INF"));
newsData.add(record);
}
} catch (SQLException e) {
if (getLog().isErrorEnabled()) {
getLog().error("<<<SQLException>>> " + e.getMessage());
}
throw e;
}



其中的SQL从断点中拿出来在SQLDevloper中可以正常执行
sql如下:
SELECT DISP_INF,TO_DATE(DISP_STRT_DT)
FROM M_INFO
WHERE DEL_FLG = '0'
AND TO_DATE(DISP_STRT_DT) <= SYSDATE
AND TO_DATE(DISP_CPLT_DT) >= SYSDATE


DISP_STRT_DT,DISP_CPLT_DT格式为 YY/MM/DD
SYSDATE格式为 YYYY/MM/DD

在本地客户端,服务器端执行都没有问题



rset = pstmt1.executeQuery(); 在这里报 ORA-01843: not a valid month错误

在网上查了很久

都是关于格式,本地语言,oracle客户端语言

其他的语句都可以执行,只有这个报无效月,高手过来看看,解决一下,实在是无奈了,谢谢


...全文
418 点赞 收藏 11
写回复
11 条回复
kbyst 2009年05月19日
谢谢两位,马上结贴给分,

但还有一个问题有疑惑,
为什么相同的SQL语句在SQLDevloper里执行没有问题
而在java代码中执行会报无效月的错误呢

同样是在客户端,结果怎么会不相同

再次感谢两位的解答
回复 点赞
kbyst 2009年05月19日
[Quote=引用 8 楼 superhsj 的回复:]
这个格式应该和本地语言无关,你改成7楼那样试试还报错吗
引用 5 楼 kbyst 的回复:

这样 08/05/11

问题不该在数据和代码上,原因在上面我提了,
还是怀疑他机器的本地语言问题

[/Quote]
跑过去了,但是又报了其他的错误
这次都没有catch到出错log。。。
回复 点赞
kbyst 2009年05月19日
[Quote=引用 6 楼 bw555 的回复:]
to_date不加掩码的话可能会去获得机器的缺省时间掩码,每台机器可能不一样
但是你指定掩码的话就肯定没问题了

[/Quote]
如何不改代码修改呢?
就是该本地的缺省时间的东西

因为是共通代码,全组只有他不管用,改代码还要批准,有些困难

已经准备重装系统了。。。
回复 点赞
superhsj 2009年05月19日
这个格式应该和本地语言无关,你改成7楼那样试试还报错吗
[Quote=引用 5 楼 kbyst 的回复:]

这样 08/05/11

问题不该在数据和代码上,原因在上面我提了,
还是怀疑他机器的本地语言问题
[/Quote]
回复 点赞
bw555 2009年05月19日
TO_DATE(DISP_STRT_DT,'yy/mm/dd')
回复 点赞
bw555 2009年05月19日
to_date不加掩码的话可能会去获得机器的缺省时间掩码,每台机器可能不一样
但是你指定掩码的话就肯定没问题了
回复 点赞
kbyst 2009年05月19日
[Quote=引用 3 楼 superhsj 的回复:]
DISP_STRT_DT的数据发出来看看,应该是掩码的问题
[/Quote]

这样 08/05/11

问题不该在数据和代码上,原因在上面我提了,
还是怀疑他机器的本地语言问题
回复 点赞
kbyst 2009年05月19日
补充一下,他机器的控制面板里的语言,还有Oracle的客户端语言,
和我们的都一样,但只有他报错,代码都在VSS上
回复 点赞
superhsj 2009年05月19日
DISP_STRT_DT的数据发出来看看,应该是掩码的问题
回复 点赞
kbyst 2009年05月19日
谢谢关注,
绝对不是代码的问题,这个可以肯定,因为这是一个登陆的模块
其他同事都正常执行登陆,只有这个同事报这个错误

初步怀疑是他机器本地语言的问题,但是具体是哪的问题就不知道了

麻烦再帮忙想想啊,谢谢了
回复 点赞
bw555 2009年05月19日
java的时间格式和oracle的不一样吧

oracle默认的格式是dd-mon-yy
TO_DATE的时候根据需要加上掩码,如

TO_DATE(DISP_STRT_DT,'yyyy-mm-dd')
回复 点赞
发动态
发帖子
Oracle
创建于2007-09-28

6418

社区成员

5.4w+

社区内容

Oracle开发相关技术讨论
社区公告
暂无公告