Вставка Clob с помощью NamedParameterJdbcTemplate - PullRequest
6 голосов
/ 26 апреля 2011

Я обычно использую триплет lobHandler + JdbcTemplate + PreparedStatementSetter для вставки моего Clob в базу данных, как я видел на http://www.java2s.com/Code/Java/Spring/InsertClobData.htm

Мой вопрос: как это сделать с помощью NamedParameterJdbcTemplate?У него нет методов, принимающих загадочный интерфейс PreparedStatementSetter в качестве параметра.

Ответы [ 3 ]

9 голосов
/ 26 апреля 2011

Это работает без использования 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);
0 голосов
/ 15 августа 2013

Я использую 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();
}
0 голосов
/ 27 апреля 2011

Я делаю что-то вроде этого, очевидно, мы используем базу данных Oracle, если вы используете что-то другое, вам придется возиться с некоторыми параметрами.Метод getJdbcTemplate является вспомогательным методом JdbcDaoSupport (вспомогательный класс Spring.)

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
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...