Java 在Windows和Linux上运行相同作业的不同结果

Java 在Windows和Linux上运行相同作业的不同结果,java,linux,windows,talend,Java,Linux,Windows,Talend,我创建了一个Talend作业,它将数据从SQL数据库导入TMS数据库。 在此作业期间,varchar字段被转换为整数字段。这是通过两个步骤完成的:首先,我检查varchar字段是否为整数,如果为真,我将其转换,否则它将变为0。 为此,使用一段代码: package routines; public class MyRoutines { public static Boolean isNumeric(String str) { if(str.equals("")){ return false;

我创建了一个Talend作业,它将数据从SQL数据库导入TMS数据库。 在此作业期间,varchar字段被转换为整数字段。这是通过两个步骤完成的:首先,我检查varchar字段是否为整数,如果为真,我将其转换,否则它将变为0。 为此,使用一段代码:

package routines;
public class MyRoutines {
 public static Boolean isNumeric(String str) {
if(str.equals("")){  return false; }
 for(int i=str.length();--i>=0;){ 
 int chr=str.charAt(i); 
if((chr<48&&chr!=46&&chr!=45&&chr!=44)|| chr>57)   return false;  } return true;   }}
我用Talend 5.1.2.r90681创建了该作业,并在Windows 7.0上进行了测试。SQL中的随机记录显示“001554”。转换后,字段在TMS数据库中保存为1554。 我导出了作业并在Linux系统上解压缩了zip文件。没什么特别的,我以前做过大约40份工作。 现在奇怪的是:在Linux上运行作业后,相同的记录被转换为15,而不是1554。 为什么

它只影响前导为零的记录。不带前导零的记录将以正确的方式转换。 给出的示例:“002534”被错误地转换为252534'转换为2534

编辑8-5-2015:同时阅读评论;-
输出表中的字段是数字字段。没有用+/-签名,所以负数是不可能的。通过ODBC以正确的方式插入数字。通过JDBC,数字以错误的方式插入。如果我将数字字段更改为带符号的数字字段,则数字将通过JDBC和ODBC以正确的方式插入表中。

我提示列定义错误;可能是不同的db版本。也许是linux版本的OpenJDK中的一个bug?从未听说过。不可修改,但您可以显式地使用base 10尝试parseInt…,10。$java-showversion java version 1.4.2 gij GNU libgcj version 4.1.2 20080704 Red Hat 4.1.2-48Oh boy选择1.7,如果没有更新的版本,可以从oracle购买。我不知道1.4有自动装箱:Boolean实际上最好是Boolean,而不是对象包装器。你说的“自动装箱”是什么意思?Boolean、int、double是基本类型;Boolean、Integer、Double是对象类,具有相应的基元值,用于将值用作对象。因此,布尔值可以为null,也可以是两个对象值:Boolean.FALSE和Boolean.TRUE。较新的java版本可以在两个抽象之间转换,即所谓的自动装箱,自动将布尔值False、true放入布尔框。
MyRoutines.isNumeric((Relational.ISNULL(row1.WagenparkNummer)?"a":row1.WagenparkNummer))?Integer.parseInt(row1.WagenparkNummer):0