Когда я пытаюсь извлечь тип объекта из процедуры Oracle, я получаю правильные числа, однако все строки, которые эта процедура передает мне, являются "???".Мой пример:
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;
import java.sql.Array;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSetMetaData;
import java.sql.Struct;
import java.sql.Types;
public class InitMethod {
public static void init() throws Exception {
Class.forName("oracle.jdbc.OracleDriver");
Connection connection =
DriverManager.getConnection("jdbc:oracle:thin:@10.0.0.20:1521:dw", "user", "password");
final String typeName = "T_DEMO_OBJECT";
final String typeTableName = "T_DEMO_OBJECTS";
final StructDescriptor structDescriptor = StructDescriptor.createDescriptor(typeName.toUpperCase(), connection);
final ResultSetMetaData metaData = structDescriptor.getMetaData();
CallableStatement cs = connection.prepareCall("{call p_generate_demo_objects(?, ?)}");
cs.setInt(1, 7);
cs.registerOutParameter(2, Types.ARRAY, typeTableName);
cs.execute();
Object[] data = (Object[]) ((Array) cs.getObject(2)).getArray();
for (Object tmp : data) {
Struct row = (Struct) tmp;
int idx = 1;
for (Object attribute : row
.getAttributes()) {
System.out.println(metaData.getColumnName(idx) + " = " + attribute);
++idx;
}
System.out.println("---");
}
cs.close();
}
Я получаю правильные номера, однако все строки "???":
SOME_NUMBER = 1 SOME_STRING = ???
SOME_NUMBER= 2 SOME_STRING = ???
В чем может быть проблема?
(я использую ojdbc6.jar)