powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / MyBatis, ошибка при получении строковой коллекции из оракла.
3 сообщений из 3, страница 1 из 1
MyBatis, ошибка при получении строковой коллекции из оракла.
    #38503428
Mumytroll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сабж собственно.
При получение строковой коллекции из оракла, колличество элементов возращается правильно.
А вместо значений ???
Если вместо строкой коллекции возращать коллекцию чисел то все работает.

Оракловая часть
Код: plsql
1.
CREATE OR REPLACE TYPE "ARRAY_STRING" IS TABLE OF VARCHAR2(4000);



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 
Connected as mumytroll@mumytroll_oracle

SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE	11.2.0.3.0	Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production

SQL> select * from nls_session_parameters
  2  /
PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE                   RUSSIAN
NLS_TERRITORY                  CIS
NLS_CURRENCY                   р.
NLS_ISO_CURRENCY               CIS
NLS_NUMERIC_CHARACTERS         ,
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD.MM.RR
NLS_DATE_LANGUAGE              RUSSIAN
NLS_SORT                       RUSSIAN
NLS_TIME_FORMAT                HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT           DD.MM.RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT             HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT        DD.MM.RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY              р.
NLS_COMP                       BINARY
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CONV_EXCP            FALSE
17 rows selected

SQL> 



Мапер
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="sample.SampleMapper">

<update id="getArrayString" statementType="CALLABLE" parameterType="java.util.Map" >
<![CDATA[
declare
  v ARRAY_STRING := ARRAY_STRING();
begin
  v.extend(1);
  v(v.Last()) := 'Param1';
  v.extend(1);
  v(v.Last()) := 'Param2';
  v.extend(1);
  v(v.Last()) := 'Param3';
  v.extend(1);
  v(v.Last()) := 'Param4';
  #{map.result, jdbcType=ARRAY, javaType=OBJECT, jdbcTypeName=ARRAY_STRING, typeHandler=sample.SampleHandler, mode=OUT} :=  v;
end;
]]>

  </update>

</mapper>



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
package sample;

import oracle.jdbc.OracleTypes;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;

import java.sql.*;

public class SampleHandler implements TypeHandler {


  @Override
  public void setParameter(PreparedStatement preparedStatement, int i, Object o, JdbcType jdbcType) throws SQLException {
    // Сюда не заходим даже.
  }

  @Override
  public Object getResult(ResultSet resultSet, String s) throws SQLException {
    return null;  //To change body of implemented methods use File | Settings | File Templates.
  }

  @Override
  public Object getResult(ResultSet resultSet, int i) throws SQLException {
    return null;  //To change body of implemented methods use File | Settings | File Templates.
  }

  @Override
  public Object getResult(CallableStatement callableStatement, int i) throws SQLException {
    Object z = callableStatement.getObject(i);
    ARRAY b = (ARRAY) z;
    Object[] x = (Object[]) b.getArray();
    for (Object o : x) {
      // Выводим что нам прилетело.
      System.out.println("==>" + o.toString() + "  " + o.getClass().getName());
    }
    return x; 
  }

}



Интерфес
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
package sample;

import org.apache.ibatis.annotations.Param;

import java.util.Map;

public interface SampleMapper {
  public void getArrayString(@Param("map") Map<String, Object> map);
}



Код для вызова
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
package sample;

import oracle.sql.ARRAY;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.assertNotNull;

@RunWith(SpringJUnit4ClassRunner.class)
public class SampleMapperTest extends AbstractMapperTest {

  @Autowired
  SampleMapper sampleMapper;

  @Test
  public void testGetArrayString() throws Exception {

    Map<String, Object> param = new HashMap<String, Object>();
    SampleMapper.getArrayString(param);
    assertNotNull("Должны получить значение", param.get("result"));
  }
}



В результатет получаем

==>??? java.lang.String
==>??? java.lang.String
==>??? java.lang.String
==>??? java.lang.String



- Дай нам хлеба!
- Эй, булочная за углом (с)
...
Рейтинг: 0 / 0
MyBatis, ошибка при получении строковой коллекции из оракла.
    #38503525
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mumytroll,

ora18n.jar не хватает
...
Рейтинг: 0 / 0
MyBatis, ошибка при получении строковой коллекции из оракла.
    #38503589
Mumytroll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ремпект!
Помогло, я мозг сломал уже.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / MyBatis, ошибка при получении строковой коллекции из оракла.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]