java - JDBC 自定义类型映射顺序问题

标签 java oracle jdbc spring-jdbc

嗨,我使用 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);
}

}

最佳答案

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

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);

关于java - JDBC 自定义类型映射顺序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57803464/

相关文章:

java - PMD:如何仅忽略 lambda 表达式中的短变量名

sql - 从球员列表开始生成比赛列表

java - ORA-00913: 值太多

sql-server - sqljdbc4 在更新到 Apple Java for Mac OS X 10.6 update 6 后挂起

database - HSQLDB 索引不一致

java - Spring Boot 无法反序列化包含 OffsetDateTime 的对象

java - python readline() 和 Java 的 Scanner 类 nextLine() 的区别

java - 空 View 不显示在 ListView 中

mysql - Oracle sqlplus 位于哪里?

java - 如何通过相互 TLS/SSL 加密从 Java JDBC 连接到 SQL DB