-----------在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客户端语言

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


...全文
783 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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')
在本地自己的操作系统上,完全模拟生产环境,让学员跟着视频一步一步搭建一套在RHEL7操作系统上面的oracle19c的rac环境。同时学员还会学会DNS服务器,DNS客户端,NTP服务器,NTP客户端等操作系统知识。让学员在短时间内,oracle和操作系统知识,有一定的提升。让学员可以独自轻松安装一套oracle rac环境。一课程主题 模拟生产环境,用多路径共享存储,用虚拟软件安装一套RHEL7.5+oracle19c+rac+打补丁二课程特色 完成模拟生产环境,用openfiler软件模拟生产惠普的3par存储,用2个虚拟网卡模拟数据库服务器的2个HBA卡。课程以实践为主,从头到尾一步一步教学员怎样操作,实践性强模拟生产需求,完全可以把这套环境拿到生产环境安装三课程内容 1.课程结束成果演示    1.1 用workstation,安装一套rhel7+oracle19c+rac+multipath+共享存储+DNS服务器+DNS客户端+NTP服务器+NTP客户端的生产环境    1.2 怎样打oracle19c的rac补丁(包括GI补丁,oracle补丁,数据库补丁,OJVM补丁,bug补丁)2.安装openfiler软件,模拟共享存储+配置多路径访问    2.1安装openfiler软件   2.2配置openfiler软件(配置2个虚拟网卡,模拟服务器的2个HBA卡)   2.3创建ocr磁盘   2.4创建mgmt磁盘   2.5创建数据文件磁盘   2.6创建归档日志磁盘3.安装2台数据库服务器    3.1安装2台数据库服务器RHEL7.5   3.2配置服务器双网卡绑定+配置服务器心跳线4.安装多路径软件识别共享存储的磁盘     4.1安装服务器本地yum源    4.2安装iscsi软件,配置多路径配置文件,识别共享存储的磁盘    4.3识别ocr磁盘    4.4识别mgmt磁盘    4.5识别数据文件磁盘    4.6识别归档日志磁盘5.oracle19c的rac环境系统参数官方说明     5.1如何配置oracle19c的rac的系统参数(我们参考官方说明)    5.2oracle19c+rac环境Best Practices 官方说明文档6.安装oracle19c+rac之前的准备工作     6.1修改/etc/hosts文件    6.2配置DNS服务器+DNS客户端+NTP服务器+NTP客户端    6.3创建用户和组    6.4创建目录    6.5修改用户环境变量    6.6安装相关软件包    6.7配置ssh互信    6.9禁用服务器透明大页7.安装oracle+19c+rac软件    7.1安装GI软件   7.2创建ASM磁盘,主要是数据文件磁盘和归档日志磁盘   7.3安装数据库软件   7.4创建数据库实例   7.5日常常用维护集群命令(启停数据库,启停集群,查看监听,教同学们怎样不死记命令,而且命令还正确)8.打补丁   8.1打GI和ORACLE的操作系统补丁  8.2打OJVM补丁  8.3打ORA600的bug补丁9.课程总结和成果演示  9.1课程总结和成果演示 四学习必要工具 安装workstation软件  官网下载openfiler,rhel7.5软件下载oracle软件(包括19.3的rac安装包,19.4的补丁)以上软件我都已经在视频里面做了下载地址说明五课程纠错1)rac的私有ip应该是不同的网段,我在视频设置错误。Ensure all private Ethernet interfaces are set to different subnets on each node. If different subnets are not used and connectivity is lost, this can cause a node reboot within the cluster2)配置好multipath,以及多路径的别名后,还要增加如下配置文件。[root@hellorac1 rules.d]# cat /etc/udev/rules.d/99-persistent.rulesENV==data, OWNER:=grid, GROUP:=asmadmin, MODE:=660上面的配置文件增加成功后,运行如下命令:#udevadm control --reload-rules#/sbin/udevadm trigger --type=devices --action=change执行完成之后,会发现/dev/dm*相应的磁盘权限变成grid.asmadmin. 视频只运行了udevadm control --reload-rules。3)安装GI部1和部2,先看部2,再看部1.特此纠正上面的3个错误。谢谢大家的支持和厚爱。

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧