【问题标题】:JDBC Custom TypeMapping Order IssueJDBC 自定义类型映射顺序问题
【发布时间】:2019-09-05 10:30:07
【问题描述】:

嗨,我使用 springjdbc 在 oracle 中调用存储过程。我有存储过程和我的输出属性自定义 udt 对象。在我的 java 代码中,我想将此类型作为 java 类为此我创建我的自定义类并实现 SQLData 和它有效。但我的问题是,如果数据库中的 udt 属性顺序发生变化 就像在第一种情况下,城市是我在udt中的第3个参数,状态是第4个。我的java类是相同的顺序,但我只切换参数顺序并且时间值设置错误(城市值到状态,状态值到城市集) 有没有办法控制这种顺序混乱。

>  CREATE TYPE ADDRESS   (
    >     NUM INTEGER, (1)
    >     STREET VARCHAR(40),(2)
    >     CITY VARCHAR(40),(3)
    >     STATE VARCHAR(2),(4)
    >   



ZIP CHAR(5) (5)  );


public class Address implements SQLData {
    public int num;
    public String street;
    public String city;
    public String state;
    public String zip;
    private String sql_type;

public String getSQLTypeName() {
    return sql_type;
}

public void readSQL(SQLInput stream, String type)
    throws SQLException {
    sql_type = type;
    num = stream.readInt();
    street = stream.readString();
    city = stream.readString();
    state = stream.readString();
    zip = stream.readString();
}

public void writeSQL(SQLOutput stream)
    throws SQLException {
    stream.writeInt(num);
    stream.writeString(street);
    stream.writeString(city);
    stream.writeString(state);
    stream.writeString(zip);
}

}

【问题讨论】:

    标签: java oracle jdbc spring-jdbc


    【解决方案1】:

    不是直接用ORAData,ORADataFactory有办法。通过ORAData Create方法,我们可以访问类型元数据信息来帮助structdescriptor.getMetaData()函数。然后我们可以与values组合

    public ORAData create(Datum datum, int i) throws SQLException
    
     StructDescriptor sd = StructDescriptor.createDescriptor("TYPENAME", c);
    
            int ColumnCount = sd.getMetaData().getColumnCount();
            for (int columCounter = 1; columCounter <= ColumnCount; columCounter++) {
                String ColumnName = sd.getMetaData().getColumnName(columCounter);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 2011-06-30
      • 2019-01-25
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      • 2011-03-05
      相关资源
      最近更新 更多