带有Spring JdbcTemplate的java.sql.Types的通配符

时间:2016-12-20 13:05:03

标签: java sql oracle blob spring-jdbc

我想将blob插入oracle数据库中的表。但我不知道其他列的数据类型。我想在Object类型中为其他列传递值。

我知道我可以使用以下代码插入blob值。

jdbcTemplate.update(
            "INSERT INTO LOB_ (BLOB_) VALUES (?)",
            new Object[]{new SqlLobValue(inputStream)},
            new int[]{Types.BLOB}
    ); 

但我的问题是,我不知道其他列的类型。那么如何将类型数组中的类型指定为update(query, args, typeArgs)方法的第三个参数。

是否有任何值像通配符传递告诉jdbctemplate跳过检查其他列的类型?

我想要这样的东西?

jdbcTemplate.update(
            "INSERT INTO LOB_ (BLOB_, NAME, AGE) VALUES (?, ?, ?)",
            new Object[]{new SqlLobValue(inputStream), "Some string", 34},
            new int[]{Types.BLOB, ?, ?}
    ); 

1 个答案:

答案 0 :(得分:0)

请试试以下内容。 https://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html

final File blobIn = new File("spring2004.jpg");
final InputStream blobIs = new FileInputStream(blobIn);
final File clobIn = new File("large.txt");
final InputStream clobIs = new FileInputStream(clobIn);
final InputStreamReader clobReader = new InputStreamReader(clobIs);
jdbcTemplate.execute(
    "INSERT INTO lob_table (id, a_clob, a_blob) VALUES (?, ?, ?)",
    new AbstractLobCreatingPreparedStatementCallback(lobHandler) { 1
        protected void setValues(PreparedStatement ps, LobCreator lobCreator) throws SQLException {
            ps.setLong(1, 1L);
            lobCreator.setClobAsCharacterStream(ps, 2, clobReader, (int)clobIn.length()); 2
            lobCreator.setBlobAsBinaryStream(ps, 3, blobIs, (int)blobIn.length()); 3
        }
    }
);
blobIs.close();
clobReader.close();