我通常使用lobHandler + JdbcTemplate + PreparedStatementSetter三元组将我的Clob插入到数据库中,就像我在http://www.java2s.com/Code/Java/Spring/InsertClobData.htm上看到的那样
我的问题是如何使用NamedParameterJdbcTemplate执行此操作?它没有接受神秘的PreparedStatementSetter接口作为参数的方法。
答案 0 :(得分:9)
这不使用PreparedStatementCallback和lobHandler,至少在插入字符串时是这样。
NamedParameterJdbcTemplate template; //= new NamedParameterJdbcTemplate(pDs);
String INSERT_STMT = "INSERT INTO MYTABLE (ID, LONG_TEXT) VALUES (:id, :clob)";
MapSqlParameterSource paramSource = new MapSqlParameterSource();
paramSource.addValue("id", 1L, Types.NUMERIC);
paramSource.addValue("clob", "a long long text", Types.CLOB);
template.update(INSERT_STMT, paramSource);
答案 1 :(得分:0)
我做这样的事情,显然我们使用Oracle数据库,如果你使用别的东西你必须摆弄一些参数。 getJdbcTemplate方法是JdbcDaoSupport(一个spring helper类)的辅助方法。
getJdbcTemplate().execute(new ConnectionCallback() {
public Object doInConnection(Connection con) throws SQLException, DataAccessException {
PublishResponseObject responseObject = new PublishResponseObject();
OracleCallableStatement ocstmt = null;
CLOB clob = null;
try {
clob = createCLOB(xmlString, con);
ocstmt = (OracleCallableStatement) con.prepareCall("{call schmea.publish(?)}");
//When in insert mode and update By Pk is specified updates are possible and version numbers will be returned.
ocstmt.setCLOB(1, clob);
...
}
finally {
clob.close()
stmt.close
}
答案 2 :(得分:0)
我正在使用Spring 2.5.6 + Oracle,对我而言,它可以立即使用。
// Inserts file into DB and returns the key for the new row
public Number insert(String filename, byte[] data) {
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("filename", filename);
params.addValue("data", data);
// Returns the autogenerated ID
KeyHolder keyHolder = new GeneratedKeyHolder();
String[] columnNames = {"ID"};
// This is a NamedParameterJdbcTemplate
jdbcTemplate.update(INSERT_SQL, params, keyHolder, columnNames);
return keyHolder.getKey();
}