arrow-left

All pages
1 of 1

Loading...

LOB ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

tbJDBC์—์„œ LOB ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

hashtag
๊ฐœ์š”

JDBC ํ‘œ์ค€์—์„œ๋Š” LOB ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๊ฐ€์ง€ ํƒ€์ž…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. BLOB(๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ)์™€ CLOB(๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ)๊ฐ€ ์ด์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. tbJDBC์—์„œ๋Š” ์ด ๋‘ ๊ฐ€์ง€ ํƒ€์ž…์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ง€์‹œ์ž(locator)๋ผ๋Š” ๊ฐœ๋…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ LOB ๋ฐ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ํ›„์— ์ง€์‹œ์ž๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ์œ„์น˜๋ฅผ ์ฐพ์•„ ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๋Š” ์ด ์ง€์‹œ์ž๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค LOB ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ ๋‹ค. ์ด ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ tbJDBC์—์„œ ์ œ๊ณตํ•˜๋Š” LOB ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

  • com.tmax.tibero.jdbc.TbBlob

  • com.tmax.tibero.jdbc.TbClob

hashtag
LOB ์ง€์‹œ์ž

  1. LOB ์ง€์‹œ์ž ์–ป์–ด์˜ค๊ธฐ

JDBC ํ‘œ์ค€์—์„œ ์ œ๊ณตํ•˜๋Š” ResultSet ๊ฐ์ฒด๋‚˜ CallableStatement ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ LOB ์ง€์‹œ์ž๋ฅผ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ResultSet ๊ฐ์ฒด

๋‹ค์Œ์€ ResultSet ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ LOB ์ง€์‹œ์ž๋ฅผ ์–ป์–ด์˜ค๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค.

  • CallableStatement ๊ฐ์ฒด

๋‹ค์Œ์€ CallableStatement ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ LOB ์ง€์‹œ์ž๋ฅผ ์–ป์–ด์˜ค๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค.

hashtag
LOB ์ง€์‹œ์ž ๋„˜๊ฒจ์ฃผ๊ธฐ

JDBC ํ‘œ์ค€์—์„œ ์ œ๊ณตํ•˜๋Š” PreparedStatement ๊ฐ์ฒด๋‚˜ CallableStatement ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ LOB ์ง€์‹œ์ž๋ฅผ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • PreparedStatement ๊ฐ์ฒด

๋‹ค์Œ์€ PreparedStatement ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ LOB ์ง€์‹œ์ž๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค.

  • CallableStatement ๊ฐ์ฒด

๋‹ค์Œ์€ CallableStatement ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ LOB ์ง€์‹œ์ž๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค.

hashtag
LOB ๋ฐ์ดํ„ฐ ์ฝ๊ณ  ์“ฐ๊ธฐ

LOB ์ง€์‹œ์ž๋ฅผ ์–ป์–ด์˜ค๋ฉด JDBC ํ‘œ์ค€์—์„œ ์ œ๊ณตํ•˜๋Š” API๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. LOB ๋ฐ์ด ํ„ฐ๋Š” ๋ณดํ†ต Byte ๋ฐฐ์—ด์ด๋‚˜ ์ŠคํŠธ๋ฆผ ํ˜•ํƒœ๋กœ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ผ๋ฐ˜์ ์ธ ์ŠคํŠธ๋ฆผ ํ˜•ํƒœ์™€ ๋‹ฌ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ ๋ฒ„ ๋‚ด๋ถ€์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์—ฐ๊ฒฐ์ด ์œ ์ง€๋˜๋Š” ํ•œ ์–ธ์ œ๋“ ์ง€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JDBC ํ‘œ์ค€์—์„œ๋Š” LOB ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์Œ๊ณผ ๊ฐ™์€ API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • InputStream Clob.getAsciiStream()

  • Reader Clob.getCharacterStream()

  • String Clob.getSubString()

  • OutputStream Clob.setAsciiStream()

๋‹ค์Œ์€ LOB ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์€ LOB ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค.

์œ„์˜ ์˜ˆ์—์„œ OutputStream์ด๋‚˜ Writer ๊ฐ์ฒด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์“ธ ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ง์ ‘ ์ „์†ก๋˜๋ฏ€๋กœ ๋ณ„๋„ ์˜ UPDATE ๋ฌธ์žฅ์„ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ LOB ์ž์ฒด๋Š” ํŠธ๋žœ์žญ์…˜ ๋ฒ”์œ„์— ํฌํ•จ๋˜๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ์ปค๋ฐ‹์„ ์ˆ˜ํ–‰ํ•ด์•ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ตœ์ข…์ ์œผ๋กœ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.

hashtag
์ž„์‹œ LOB

tbJDBC์—์„œ๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ LOB ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ž„์‹œ LOB์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ์ด ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ๋Š” ํ…Œ์ด๋ธ”์— ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • Connection.createBlob() return Blob

  • Connection.createClob() return Clob

  • Connection.createNClob() return NClob

์ž„์‹œ LOB์„ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ž„์‹œ ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด ์˜์—ญ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋” ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š๊ฒŒ ๋˜๋ฉด, ์‚ฌ์šฉ์ž๋Š” ๋ฐ˜๋“œ์‹œ ์ด๊ฒƒ์„ ํ•ด์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ด ์˜์—ญ์˜ ๋ฐ์ดํ„ฐ๋Š” ๊ณ„์† ๋‚จ์•„์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ž„์‹œ LOB๋Š” LOB ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ธ๋”ฉํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ๋‚˜์—ดํ•œ ๋ฉ”์†Œ๋“œ๋“ค์€ JDBC ํ‘œ์ค€ API๋“ค๋กœ ์ผ๋ถ€ ๋ฉ”์†Œ๋“œ๋Š” Java ๋ฒ„์ „์— ๋”ฐ๋ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด tbJDBC์—์„œ๋Š” ๋ณ„๋„๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌํ˜„ ๋ฉ”์†Œ๋“œ๋“ค์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋“ค์„ ์ด์šฉํ•  ๊ฒฝ์šฐ ๋‹ค๋ฅธ JDBC์™€์˜ ํ˜ธํ™˜์„ฑ์€ ๋–จ์–ด์ง€์ง€๋งŒ tbJDBC์— ํ•œํ•˜์—ฌ Java ๋ฒ„์ „์— ๊ด€๊ณ„ ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • TbConnection.createTbBlob() return TbBlob

  • TbConnection.createTbClob() return TbClob

  • TbConnection.createTbNClob() return TbNClob

Tibero 4.0 SP1๊นŒ์ง€์˜ tbJDBC์—์„œ๋Š” ๊ตฌํ˜„ ๋ฉ”์†Œ๋“œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•˜์˜€์œผ๋‚˜, ํ˜ธํ™˜์„ฑ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด ํ๊ธฐ(deprecated)ํ•˜๊ณ  ์œ„์˜ ๋ฉ”์†Œ๋“œ๋“ค๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • static TbBlob.createTemporary(Connection conn) return TbBlob

  • static TbClob.createTemporary(Connection conn) return TbClob

  • static TbClob.createTemporaryNClob(Connection conn) return TbClob

hashtag
API ๋ชฉ๋ก

hashtag
ํ‘œ์ค€ API

LOB์™€ ๊ด€๋ จ๋œ ํ‘œ์ค€ API์˜ ์ •๋ณด๋Š” JDBC ํ‘œ์ค€ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ฉ๋‹ˆ๋‹ค.

hashtag
ํ™•์žฅ API

tbJDBC์—์„œ๋Š” LOB์™€ ๊ด€๋ จ๋œ API๋กœ BLOB, CLOB, NCLOB ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

hashtag
CONNECTION API

TbConnection ํด๋ž˜์Šค์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ API๋ฅผ ์ถ”๊ฐ€๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

API
์„ค๋ช…

hashtag
BLOB API

TbBlob ํด๋ž˜์Šค์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ API๋ฅผ ์ถ”๊ฐ€๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

API
์„ค๋ช…

hashtag
CLOB API

TbClob ํด๋ž˜์Šค์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ API๋ฅผ ์ถ”๊ฐ€๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

API
์„ค๋ช…

hashtag
NCLOB API

TbNClob ํด๋ž˜์Šค์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ API๋ฅผ ์ถ”๊ฐ€๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

API
์„ค๋ช…
  • Writer Clob.setCharacterStream()

  • int Clob.setString()

  • InputStream Blob.getBinaryStream()

  • byte[] Blob.getBytes()

  • OutputStream Blob.setBinaryStream()

  • int Blob.setBytes()

  • Blob.free()
  • Clob.free()

  • NClob.free()

  • TbBlob.freeTemporary()
  • static TbBlob.freeTemporary(TbBlob blob)

  • TbClob.freeTemporary()

  • static TbClob.freeTemporary(TbClob clob)

  • TbNClob.freeTemporary()

  • static TbNClob.freeTemporary(TbNClob nclob)

  • int ๋ชจ๋“œ๋กœ CLOB์„ ์˜คํ”ˆ

    long putChars(long offset, char[] buffer)

    buffer ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ offset ์œ„์น˜์— ์ €์žฅ

    long putChars(long offset, char[]

    buffer, long numChars)

    buffer ๋ฐ์ดํ„ฐ๋ฅผ numChars๋งŒํผ ์ฝ์–ด์„œ offset ์œ„์น˜์— ์ €์žฅ

    long putChars(long offset, char[] buffer,

    long bufOffset, long numChars)

    buffer ๋ฐ์ดํ„ฐ๋ฅผ bufOffset ์œ„์น˜๋ถ€ํ„ฐ numChars๋งŒํผ ์ฝ์–ด์„œ offset ์œ„์น˜์— ์ €์žฅ

    int ๋ชจ๋“œ๋กœ NCLOB์„ ์˜คํ”ˆ

    long putChars(long offset, char[] buffer)

    buffer ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ offset ์œ„์น˜์— ์ €์žฅ

    long putChars(long offset, char[] buffer, long numChars)

    buffer ๋ฐ์ดํ„ฐ๋ฅผ numChars๋งŒํผ ์ฝ์–ด์„œ offset ์œ„์น˜์— ์ €์žฅ

    long putChars(long offset, char[] buffer, long bufOffset, long num Chars)

    buffer ๋ฐ์ดํ„ฐ๋ฅผ bufOffset ์œ„์น˜๋ถ€ํ„ฐ numChars๋งŒํผ ์ฝ์–ด์„œ offset ์œ„์น˜์— ์ €์žฅ

    TbBlob createTbBlob()

    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ž„์‹œ BLOB์„ ์ƒ์„ฑํ•œ ํ›„์— TbBlob ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜

    TbClob createTbClob()

    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ž„์‹œ CLOB์„ ์ƒ์„ฑํ•œ ํ›„์— TbClob ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜

    TbNClob createTbNClob()

    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ž„์‹œ NCLOB์„ ์ƒ์„ฑํ•œ ํ›„์— TbNClob ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜

    TbBlob createEmptyBlob()

    EMPTY_BLOB์„ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜

    void close()

    BLOB์„ ๋‹ซ์Œ

    OutputStream getBinaryOutput

    Stream()

    setBinaryStream(1L)๊ณผ ๋™์ผ

    OutputStream getBinaryOutput

    Stream(long)

    setBinaryStream(long)๊ณผ ๋™์ผ

    void open(int)

    int ๋ชจ๋“œ๋กœ BLOB์„ ์—ถ

    TbClob createEmptyClob()

    EMPTY_CLOB์„ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜

    void close()

    CLOB์„ ๋‹ซ์Œ

    int getBufferSize()

    ์„œ๋ฒ„์™€ ์›ํ™œํ•˜๊ฒŒ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก 32KB์˜ ๋ฒ„ํผ ํฌ๊ธฐ๋ฅผ ๋ฐ˜ํ™˜

    long getChars(long offset, char[]

    buffer)

    offset ์œ„์น˜๋ถ€ํ„ฐ CLOB ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ buffer์— ์ €์žฅ

    long getChars(long offset, char[]

    buffer, long numChars)

    offset ์œ„์น˜๋ถ€ํ„ฐ numChars๋งŒํผ์˜ CLOB ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ buffer์— ์ €์žฅ

    long getChars(long offset, char[] buffer,

    long bufOffset, long numChars)

    offset ์œ„์น˜๋ถ€ํ„ฐ numChars๋งŒํผ์˜ CLOB ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ buffer์˜ bufOffset ์œ„์น˜์— ์ €์žฅ

    TbNClob createEmptyNClob()

    EMPTY_NCLOB์„ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜

    void close()

    NCLOB์„ ๋‹ซ์Œ

    int getBufferSize()

    ์„œ๋ฒ„์™€ ์›ํ™œํ•˜๊ฒŒ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก 32KB์˜ ๋ฒ„ํผ ํฌ๊ธฐ๋ฅผ ๋ฐ˜ํ™˜

    long getChars(long offset, char[] buffer)

    offset ์œ„์น˜๋ถ€ํ„ฐ NCLOB ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ buffer์— ์ €์žฅ

    long getChars(long offset, char[] buffer, long numChars)

    offset ์œ„์น˜๋ถ€ํ„ฐ numChars๋งŒํผ์˜ NCLOB ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ buffer์— ์ €์žฅ

    long getChars(long offset, char[] buffer, long bufOffset, long num Chars)

    offset ์œ„์น˜๋ถ€ํ„ฐ numChars๋งŒํผ์˜ NCLOB ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ buffer์˜ bufOffset ์œ„์น˜์— ์ €์žฅ

    void open(int)

    void open(int)

    ResultSet.getBlob() 
    ResultSet.getClob() 
    ResultSet.getObject()
    ResultSet rs = stmt.executeQuery("SELECT document, image FROM library"); 
    while (rs.next())
    {
        Clob document = rs.getClob(1);
        // ๋˜๋Š” Clob document = (Clob)rs.getObject(1);
        
        Blob image = rs.getBlob(2);
        // ๋˜๋Š” Blob image = (Blob)rs.getObject(1);
    }
    CallableStatement.getBlob() 
    CallableStatement.getClob() 
    CallableStatement.getObject()
    CallableStatement cstmt = conn.prepareCall("{call proc(?)}"); 
    cstmt.registerOutParameter(1, Types.CLOB);
    cstmt.execute();
    
    Clob document = cstmt.getClob(1);
    // ๋˜๋Š” Clob document = (Clob)cstmt.getObject(1);
    PreparedStatement.setBlob() 
    PreparedStatement.setClob() 
    PreparedStatement.setObject()
    PreparedStatement pstmt = conn.prepareStatement("INSERT INTO library 
    VALUES (?, ?)");
    
    pstmt.setClob(1, document);
    // ๋˜๋Š” pstmt.setObject(1, document, Types.CLOB);
    
    pstmt.setBlob(2, image);
    // ๋˜๋Š” pstmt.setObject(1, image, Types.BLOB);
    
    pstmt.executeUpdate();
    CallableStatement.setBlob() 
    CallableStatement.setClob() 
    CallableStatement.setObject()
    CallableStatement cstmt = conn.prepareCall("{call proc(?, ?)}");
    
    cstmt.setClob(1, document);
    // ๋˜๋Š” cstmt.setObject(1, document, Types.CLOB);
    
    cstmt.setBlob(2, image);
    // ๋˜๋Š” cstmt.setObject(1, image, Types.BLOB);
    
    cstmt.execute();
    // BLOB ๋ฐ์ดํ„ฐ
    InputStream is = image.getBinaryStream(); 
    byte[] imageData = new byte[1000]
    int readLength = is.read(imageData);
    
    // CLOB ๋ฐ์ดํ„ฐ
    Reader reader = document.getCharacterStream(); 
    char[] docData = new char[1000];
    int readLength = reader.read(docData, 0, docData.length);
    // BLOB ๋ฐ์ดํ„ฐ
    byte[] imageData = {32, 53, 78, 19, 2, 93}; 
    OutputStream os = image.setBinaryStream(); 
    os.write(imageData);
    
    // CLOB ๋ฐ์ดํ„ฐ
    char[] docData = {'J', 'D', 'B', 'C', '์•ˆ', '๋‚ด', '์„œ'};
    Writer writer = document.setCharacterStream(); 
    writer.write(docData);
    writer.flush(); 
    writer.close();
    PreparedStatement pstmt = conn.prepareStatement("INSERT INTO 
    library VALUES (?, ?)");
    pstmt.setInt(1, 20090811);
    
    Clob doc = conn.createClob();
    doc.setString(1, "JDBC Guide<br>writer:Rachael<br>proofreader:Patrick"); 
    pstmt.setClob(2, doc);
    pstmt.executeUpdate();
    
    doc.free(); 
    pstmt.close();