我用iBATIS,录入一记录,基本草一个字段为空。机器1:成功;
机器2: 成功;
机器3:出无效的列类型错误!我做的模板和同事做的都有录入,但同事的却在每一机器上都可以运行。
这里应该不会是jar包问题了。iBATIS中说如果录入的值为NULL,会出这种错,但为什么在其它机器是可以运行?
{我用2.0.2的Broker,数据库是oracle8i,使用apache common dbcp,假定有一个对象class A{
  private String name;
}在Save这个A对象的时候,根据orbroker.xml文件的定义,会调用
INSERT INTO A(name) VALUES(?);
来处理处理,如果name属性为null,根据jdbc开发的经验,应该是这样stmt.setNull(1,Types.VARCHAR);但是,O/R Broker运行的结果却是报“net.sourceforge.orbroker.QueryException: 无效的列类型”,在eclipse 中通过debug功能,将断点设在
    public void setNull(int parameterIndex, int sqlType) throws SQLException
    { checkOpen(); try { _stmt.setNull(parameterIndex,sqlType); } catch (SQLException e) { handleException(e); } }
通过debug发现,这儿的sqlType设的是0,也就是java.sqlTypes类中定义的
 public final static int NULL  =   0;
而不是我们期望的
 public final static int VARCHAR  =  12;在ibatis里面,可以通过对result-object每个属性强行指令sql-type或是jdbctype来控制,但是在O/R Broker里面,我没有发现哪份文档有这个介绍。
}

解决方案 »

  1.   

    我用iBATIS,录入一记录,其中有一个字段为空。  
     
    机器1:成功;  
    机器2:  成功;  
    机器3:出无效的列类型错误!  
     
    我做的模板和同事做的都有录入,但同事的却在每一机器上都可以运行。  
    这里应该不会是jar包问题了。  
     
    iBATIS中说如果录入的值为NULL,会出这种错,但为什么在其它机器是可以运行?