ojdbc6을 사용하여 준비된 명령문에 UDT 객체를 바인딩하기 위해 java.sql.SQLData
을 구현했습니다. 자, 내 UDT 중 일부는 배열을 포함합니다. 지금해야 할 일은 다음과 같습니다.Oracle 용 SQLData.writeSQL() 내 java.sql.SQLOutput에 쓰는 방법
class MyType implements SQLData {
public void writeSQL(SQLOutput stream) throws SQLException {
Array array = //...
stream.writeArray(array);
}
}
Oracle 배열을 생성하려면 JDBC 연결이 필요합니다. 일반적으로이이 같은 수행됩니다
OracleConnection conn = // ...
Array array = conn.createARRAY("MY_ARRAY_TYPE", new Integer[] { 1, 2, 3 });
그러나, writeSQL(SQLOutput)
방법, 내가 연결되어 있지 않습니다. 또한 간결한 질문으로 설명하기 어려운 이유 때문에 MyType
에 연결 참조를 유지할 수 없습니다. 어떻게 든 그 연결을 SQLOutput
에서 추출 할 수 있습니까? 다음과 같이 불안정한 구성을 사용하지 마십시오.
// In ojdbc6, I have observed a private "conn" member in OracleSQLOutput:
Field field = stream.getClass().getDeclaredField("conn");
field.setAccessible(true);
OracleConnection conn = (OracleConnection) field.get(stream);
아이디어가 있으십니까? 대안?
해결 했습니까? 나는 똑같은 문제에 직면하고있다. –
@PabloSantaCruz : 아직까지. 나는 UDT를 바인딩하기 전에 정적'ThreadLocal'에 로컬로 연결을 저장하는 방법에 대해 생각 해왔다. 그게 효과가 있지만, 정말 잘못 느낀다 ... –
좋아, 내가 별도의 대답으로 한 것을 쓸 것이다. 또한 잘못된 생각이 들지만이 문제를 즉시 해결해야했습니다. –