Как передать объект массива из кода jdbc

У меня есть хранимая процедура get_data (estargs набор (символ (1000) не пустой)) в базе данных informix 11.5. Я должен использовать эту хранимую процедуру для получения значения от базы данных.

Я пытался использовать этот путь, но он перестал работать:

conn = dataSource.getConnection();
            String [] arrayObj={"and code = 'Value1'","and lmt= 10000.000"};
            CallableStatement test=conn.prepareCall("{call get_data(?)}");
            test.setObject(1, arrayObj);
            test.execute();
            ResultSet testrs = test.getResultSet();
            while (testrs.next()) {
                int data = testrs.getInt(1);
                System.out.println(data);

            }

Это не работает. Что Вы думаете, что я делаю неправильно?

1
задан Sameer Malhotra 14 July 2010 в 16:53
поделиться

2 ответа

Вы пробовали использовать java.sql.Array?

0
ответ дан 2 September 2019 в 23:03
поделиться

Это невозможно. Замените

conn.prepareCall("{call get_data(?)}");

на

conn.prepareCall("{call get_data(?, ?)}");

и замените

test.setObject(1, arrayObj);

на

test.setObject(1, arrayObj[0]);
test.setObject(2, arrayObj[1]);

Связанный вопрос:


Обновление : сделайте все более «динамичным», вы? Я хочу самостоятельно сгенерировать и заполнить заполнители с помощью следующих двух служебных методов:

public static String preparePlaceHolders(int length) {
    StringBuilder builder = new StringBuilder(length * 2 - 1);
    for (int i = 0; i < length; i++) {
        if (i > 0) builder.append(',');
        builder.append('?');
    }
    return builder.toString();
}

public static void setValues(PreparedStatement preparedStatement, Object... values) throws SQLException {
    for (int i = 0; i < values.length; i++) {
        preparedStatement.setObject(i + 1, values[i]);
    }
}

, которые можно использовать следующим образом:

private static final String SQL_CALL_GET_DATA = "{call get_data(%s)}";

// ...
String sql = String.format(SQL_CALL_GET_DATA, preparePlaceholders(arrayObj.length));
statement = connection.prepareCall(sql);
setValues(statement, arrayObj);
// ...
2
ответ дан 2 September 2019 в 23:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: