2016-12-20 31 views
2

oracleデータベースの表にBLOBを挿入したいとします。しかし、私は他の列のデータ型を知らない。 Object型のほかの列の値を渡したい。Spring JdbcTemplateを使用したjava.sql.Typesのワイルドカード

次のコードを使用してBLOB値を挿入できます。

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

しかし、私の問題は、他の列の種類がわかりません。次に、型配列の型をupdate(query, args, typeArgs)メソッドの第3引数としてどのように指定することができますか?

他の列の型のチェックをスキップするようにjdbctemplateに伝えるために渡すワイルドカードのような値はありますか?

このようなものが欲しいですか?

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

答えて

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(); 
+1

これは、型を引数として必要としません。しかしここでは、オブジェクト配列として値のセットを渡すことはできません。私は手動で準備されたステートメントに値を設定する必要があります私の場合は不可能です。 –

関連する問題