我们一直注意到,因为我们将tomcat从7.0.28升级到7.0.40,oracle sql中的隐式数据类型的工作方式与以前不同。用于执行的SQL的示例很好......但现在抛出错误...
sql =“select * from match_table,其中dec =?”;
表结构......
COLUMN_NAME DATA_TYPE NULLABLE
JOB_CD VARCHAR2(10) Yes
DEC NUMBER Yes
MATCH_KEY VARCHAR2(70) Yes
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
int inserted =0;
try {
conn = BasicDataSourceManager.getConnection();
pst = conn.prepareStatement( sql );
pst.setString(1,dropDecInfo.getDec() );
rs = pst.executeQuery();
}catch(SQLException e){
e.printStackTrace();
}
.... dropDecInfo.getDec()将dec代码作为字符串返回。
此代码用于在tomcat服务器上工作....但现在我得到了... ORA-01858:找到了一个非数字字符,其中有一个数字是预期的
如果我在同一个Linux机器上运行....作为批处理java(来自具有有效main的类)来自shell脚本,它可以正常工作。我们在日期字段中遇到类似错误,这些日期字段未使用to_date显式转换。我们正在使用带有ojdbc14-10.2.0.0.jar的Oracle 11g。
答案 0 :(得分:0)
隐式日期转换的问题表明,充当Oracle客户端的两个系统使用影响日期格式的不同NLS设置。隐式转换失败,因为使用与数据库中的格式不匹配的日期格式解析日期(反之亦然)。
隐式号码转换也是如此。
Oracle OJDBC驱动程序使用一些查询Java环境语言设置的规则初始化NLS设置,该环境源自OS环境。因此,Tomcat启动脚本可能会导致更改。
要修复它,请尝试在Java环境中或通过适当初始化每个Oracle连接进行显式设置。