我使用java.sql.SQLData接口將我的java對象映射到Oracle數據庫類型。java.sql.SQLData - Oracle對象映射問題
例如,我已經定義了Oracle數據庫中的對象類型人員爲:
CREATE OR REPLACE TYPE PERSON AS OBJECT
(
PERSON_ID NUMBER,
PERSON_NAME VARCHAR2(100)
);
對應的Java類型是:
public class Person implements SQLData {
private String sql_type = "PERSON";
private int personId;
private String personName;
public int getPersonId() {
return personId;
}
public void setPersonId(int personId) {
this.personId = personId;
}
public String getPersonName() {
return personName;
}
public void setPersonName(String personName) {
this.personName = personName;
}
public void readSQL(SQLInput stream, String typeName) throws SQLException
{
this.sql_type=typeName;
this.personId = stream.readLong();
this.personName = stream.readString();
}
public void writeSQL(SQLOutput stream) throws SQLException
{
stream.writeLong(this.personId);
stream.writeString(this.personName);
}
}
目前這工作得很好,並填充人員從數據庫類型的對象。
現在,我有另一種類型,它的相應的集合,如下所示:
CREATE OR REPLACE TYPE SUBJECT AS OBJECT
(
SUBJECT_ID NUMBER,
SUBJECT_NAME VARCHAR2(100)
);
-- Corresponding List
CREATE OR REPLACE TYPE SUBJECT_LIST IS TABLE OF SUBJECT;
我有如下開創型的人與此集合的新條目:
CREATE OR REPLACE TYPE PERSON AS OBJECT
(
PERSON_ID NUMBER,
PERSON_NAME VARCHAR2(100),
SUBJECT_LIST TYPE SUBJECT_LIST
);
要使這個改變我不得不改變我的java Person類。我嘗試添加java.sql.Array參數,但它不起作用。
你能幫忙在這裏把新的PERSON對象類型映射到Java類型嗎?
在此先感謝。
--Siddharth
上面的示例是我現在使用的示例。我沒有直接使用SQLInput。我只是簡單地實現了SQLData接口和readSQL和writeSQL方法。這些方法由SQLInput和SQLOutput在內部調用。 如果我沒有正確描述問題陳述,我很抱歉。我需要在Oracle對象類型中有一個Oracle集合類型。我想知道如何創建相應的Java類。我是否需要Collection類型的java.sql.Array實例? 謝謝。 – Sid 2010-07-28 05:32:09
是的,我認爲你需要一個java.sql.Array類,儘管我們實際上使用了oracle.sql.ARRAY,因爲它已經爲我們實現了很多方法。 – cagcowboy 2010-07-28 06:30:15
所以我應該有一個人類的java.sql.Array實例,如下所示: private java.sql.Array subjectList; 在readSql ... this.subjectList = stream.readArray();在writeSQL中... stream.writeArray(subjectList); 這是你的意思? – Sid 2010-07-28 07:53:29