Проблема конструктора в определении типа объекта Oracle с использованием класса Java - PullRequest
0 голосов
/ 18 ноября 2018

Я создал объект в Oracle на основе класса Java, но не могу понять, как определить конструктор.

Например, у меня есть такой класс Java, и я загружаю его в базу данных Oracle:

import java.sql.SQLData;
import java.sql.SQLException;
import java.sql.SQLInput;
import java.sql.SQLOutput;

public class Foo implements SQLData {
    public int bar;

    public Foo() {
        this.bar = 0;
    }

    private String sql_type;

    @Override
    public String getSQLTypeName() throws SQLException {
        return sql_type;
    }

    @Override
    public void readSQL(SQLInput stream, String typeName) throws SQLException {
        bar = stream.readInt();
        sql_type = typeName;
    }

    @Override
    public void writeSQL(SQLOutput stream) throws SQLException {
        stream.writeInt(bar);
    }
}

Затем в Oracle я создаю объект, подобный этому:

CREATE OR REPLACE TYPE foo AS OBJECT 
    EXTERNAL NAME 'Foo' LANGUAGE JAVA
    USING SQLDATA(
        bar NUMBER EXTERNAL NAME 'bar',

        CONSTRUCTOR FUNCTION foo RETURN SELF AS RESULT EXTERNAL NAME 'Foo() return Foo'
    )
;

Но я получаю такую ​​ошибку каждый раз, когда пытаюсь использовать ее с моим конструктором:

ORA-29540: класса oracle.aurora.sqljtype.SQLJ7380A743BCB64E4FAFE99F03EBECF627 не существует.

Может ли кто-нибудь объяснить мне, как определить конструктор, когда я создаю объект Oracle на основе класса Java?

1 Ответ

0 голосов
/ 18 ноября 2018

Вы сказали вашему ctor по умолчанию, как инициализировать строку int, но ничего не сказали о типе:

public class Foo implements SQLData {

    private static final int DEFAULT_BAR = 0;
    private static final String DEFAULT_TYPE = "SOMETHING";

    public int bar;
    private String sql_type;

    public Foo() {
        this(DEFAULT_BAR, DEFAULT_TYPE);
    }

    public Foo(int x, String type) { 
        this.bar = x;
        this.sql_type = type;
    }
}

Это так, как вы его написали.Это то, что вы хотите?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...