2014-05-06 91 views
2

請建議一些使用jdbctemplate執行下面的查詢的方法。使用Spring執行更新jdbctemplate

update student set result='pass' where stud_id in (100,101,102); 

我已經嘗試了下面,但卡住了無效的列類型。

我傳遞的

String query = "UPDATE STUDENT SET RESULT = ? WHERE OBJ_ID IN (SELECT * FROM TABLE)"; 
int[] stud_ids = new int[]{100,101,102}; 

    getJdbcTemplate().query(updateStateSQL, new PreparedStatementSetter() { 

    @Override 
    public void setValues(PreparedStatement ps) throws SQLException { 
     final Connection con = getJdbcTemplate().getNativeJdbcExtractor().getNativeConnection(ps.getConnection()); 
     ps.setString(1, 'PASS'); 
     ps.setArray(2, stud_ids); 
    } 
    }, new RowMapper<String>() { 

    @Override 
    public String mapRow(ResultSet rs, int arg1) throws SQLException { 
     return rs.getString(1); 
    } 
    }); 
} 
+1

你會使用'更新()'方法不'查詢()'上的JdbcTemplate方法。 – CodeChimp

+0

我嘗試過使用update(),但同樣的錯誤 –

+0

什麼是錯誤信息? – janos

回答

0

您寫道:

String query = "UPDATE STUDENT SET RESULT = ? WHERE OBJ_ID IN (SELECT * FROM TABLE)"; 

getJdbcTemplate().query(updateStateSQL, ...) 

不是你寫的updateStateSQL值。如果是一樣的query,那麼這不能工作:

ps.setString(1, 'PASS'); 
ps.setArray(2, stud_ids); 

因爲你需要在查詢精確2問號(?),你只在您的文章之一。

你可以試試這個:

String query = "UPDATE STUDENT SET RESULT = ? WHERE OBJ_ID IN (?)"; 

但說實話,我從來沒有使用ps.setArray,我不知道它會做你所期望的。

什麼應該工作使用NamedParameterJdbcTemplate,是這樣的:

String sql = "UPDATE STUDENT SET RESULT = :result WHERE OBJ_ID IN (:ids)"; 
Map<String, Object> params = new HashMap<String, Object>(); 
params.put("result", "PASS"); 
params.put("ids", Arrays.asList(new Integer[] {100, 101, 102})); 
getSimpleJdbcTemplate().update(sql, params);