Все строки "???"при извлечении таблиц из Oracle типа объекта - PullRequest
0 голосов
/ 04 июня 2018

Когда я пытаюсь извлечь тип объекта из процедуры 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)

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Это происходит, когда вы не включаете orai18n.jar в ваш путь к классам и когда набор символов базы данных отсутствует в этом списке: ASCII, UTF8 или ISOLATIN1.Все символы заменены на «символ замены», который означает «?».Вы можете скачать orai18n.jar из OTN (поиск "oracle jdbc download" в Google).

0 голосов
/ 04 июня 2018

В моей компании у нас есть столбцы данных PII в определенной схеме базы данных Oracle, которые редактируются и заменяются пользовательской строкой.Кажется вероятным, что «???»последовательность, чтобы быть редактирование данных в таблице.Вы можете узнать у администратора базы данных, так ли это.

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