使用jdbcTemplate.queryForList的任何调用都会返回一个包含所有列的NULL值的Maps列表。列应该有字符串值。
与在本机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;
}
正如您所看到的,我添加了一些调试代码来列出queryForList的结果,我还从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的jdbc驱动程序在MySQL Server 5.5数据库的另一台服务器上运行相同的代码。
答案 0 :(得分:0)
使用MS SQL Server jdbc驱动程序而不是使用JDBC ODBC桥解决了该问题。我不知道为什么它不能在这座桥上工作。