2015-01-08 2 views
0

Любые вызовы с использованием jdbcTemplate.queryForList возвращают список Карт, которые имеют значения NULL для всех столбцов. Столбцы должны иметь строковые значения.jdbcTemplate.queryForList возвращает список Карта, где все значения столбца NULL

Я получаю правильное количество строк по сравнению с результатом, получаемым при выполнении того же запроса в собственном SQL-клиенте.

Я использую мост JDBC ODBC и базы данных MS SQL Server 2008.

Я следующий код в моей DAO:

public List internalCodeDescriptions(String listID) { 
    List rows = jdbcTemplate.queryForList("select CODE, DESCRIPTION from CODE_DESCRIPTIONS where LIST_ID=? order by sort_order asc", new Object[] {listID}); 
    //debugcode start 
    try { 
    Connection conn1 = jdbcTemplate.getDataSource().getConnection(); 
    Statement stat = conn1.createStatement(); 
    boolean sok = stat.execute("select code, description from code_descriptions where list_id='TRIGGER' order by sort_order asc"); 
    if(sok) { 
     ResultSet rs = stat.getResultSet(); 
     ResultSetMetaData rsmd = rs.getMetaData(); 
     String columnname1=rsmd.getColumnName(1); 
     String columnname2=rsmd.getColumnName(2); 
     int type1 = rsmd.getColumnType(1); 
     int type2 = rsmd.getColumnType(2); 
     String tn1 = rsmd.getColumnTypeName(1); 
     String tn2 = rsmd.getColumnTypeName(2); 

     log.debug("Testquery gave resultset with:"); 
     log.debug("Column 1 -name:" + columnname1 + " -typeID:"+type1 + " -typeName:"+tn1); 
     log.debug("Column 2 -name:" + columnname2 + " -typeID:"+type2 + " -typeName:"+tn2); 

     int i=1; 
     while(rs.next()) { 
      String cd=rs.getString(1); 
      String desc=rs.getString(2); 
      log.debug("Row #"+i+": CODE='"+cd+"' DESCRIPTION='"+desc+"'"); 
      i++; 
     } 
    } else { 
     log.debug("Query execution returned false"); 
    } 
    } catch(SQLException se) { 
     log.debug("Something went haywire in the debug code:" + se.toString()); 
    } 


    log.debug("Original jdbcTemplate list result gave:"); 
    Iterator<Map<String, Object>> it1= rows.iterator(); 
    while(it1.hasNext()) { 
     Map mm = (Map)it1.next(); 
     log.debug("Map:"+mm); 
     String code=(String)mm.get("CODE"); 
     String desc=(String)mm.get("description"); 
     log.debug("CODE:"+code+" : "+desc); 
    } 
    //debugcode end 
    return rows; 
} 

Как вы можете видеть, я добавил некоторые отладки код, чтобы отобразить результаты запросаForList, а также получить соединение из объекта jdbcTemplate и использовать его для отправки того же запроса с использованием базовых методов jdbc (listID = 'TRIGGER').

Что озадачивает меня в том, что журнал выдает что-то вроде этого: общая

Testquery gave resultset with: 
Column 1 -name:code -typeID:-9 -typeName:nvarchar 
Column 2 -name:decription -typeID:-9 -typeName:nvarchar 
Row #1: CODE='C1' DESCRIPTION='BlodoverxF8rin eller bruk av blodprodukter' 
Row #2: CODE='C2' DESCRIPTION='Kodetilfelle, hjertestans/respirasjonstans' 
Row #3: CODE='C3' DESCRIPTION='Akutt dialyse' 
... 
Row #58: CODE='S14' DESCRIPTION='Forekomst av hvilken som helst komplikasjon' 

... 

Original jdbcTemplate list result gave: 
Map:(CODE=null, DESCRIPTION=null) 
CODE:null : null 
Map:(CODE=null, DESCRIPTION=null) 
CODE:null : null 
... 

58 повторений.

Почему результат метода queryForList возвращает NULL во всех столбцах для каждой строки? Как я могу получить результат, который я хочу использовать jdbcTemplate.queryForList?

xF8 должен быть буквой ø, поэтому у меня есть некоторые проблемы с кодировкой, но я не вижу, как это может привести ко всем значениям - также строки, не содержащие каких-либо странных букв (строка 2), чтобы превратиться в значения NULL в списке карт, возвращаемых методом jdbcTemplate.queryForList.

Тот же код отлично работает на другом сервере с базой данных MySQL Server 5.5, используя драйвер jdbc для MySQL.

+0

Почему вы используете мост ODBC JDBC? Не могли бы вы попробовать использовать драйвер JDBC Microsoft или jTDS? –

+0

У меня нет возможности копировать файлы на этот сервер (он находится в защищенной сети без доступа в Интернет). Я убедил системного администратора клиента скопировать драйвер jdbc MS SQL Server на сервер и действительно устранил проблему. Я не очень надеялся, что с тех пор, как я получил данные, используя «простой» jdbc-код, а не при использовании jdbcTemplate. –

ответ

0

Проблема была решена с использованием драйвера jdbc MS SQL Server вместо использования моста JDBC ODBC. Я не знаю, почему это не сработало с мостом.

Смежные вопросы