Dashboard > iBATIS DataMapper > Home > Frequently Asked Questions > How do I use a BLOB or CLOB > Information > Page Comparison
How do I use a BLOB or CLOB
compared with
Current by Chadwick
on Jun 21, 2009 04:11.

(show comment)
 
Key
These lines were removed. This word was removed.
These lines were added. This word was added.

View page history


There are 0 changes. View first change.

 Here is an example of how to use the Custom Type Handler (CTH) feature of iBatis with large objects (LOB) such as BLOB's (Binary) and CLOB's (Character). As of release 2.0.9 the iBatis framework has the default CLOB and BLOB type handlers included. The example below was done for Oracle but should work for any database with a well written JDBC driver. Make sure that you do not use the thin driver supplied from Oracle. You need to use the latest ojbc14.jar.
  
 The example below was not the intended way to use CTH's but it works great for me!
  
 First lets take a look at the table.
  
 {code:title=Report.sql|borderStyle=solid}
 REPORT {
  id varchar2(5),
  name varchar2(25),
  description varchar2(1000),
  data BLOB
 }
 {code}
  
 Next we continue by creating a plain old java object (POJO) to represent this table.
  
 {code:title=Report.java|borderStyle=solid}
 /*
  * Report.java
  *
  * Created on March 23, 2005, 11:00 AM
  */
 package reporting.viewer.domain;
  
 /**
  *
  * @author Nathan Maves
  */
 public class Report {
  
  /**
  * Holds value of property id.
  */
  private String id;
  /**
  * Holds value of property name.
  */
  private String name;
  /**
  * Holds value of property description.
  */
  private String id;
  /**
  * Holds value of property data.
  */
  private byte[] data;
  
  
  //Standard accessors and mutators
  
  public byte[] getData() {
  return this.data;
  }
  
  public void setData(byte[] data) {
  this.data = data;
  }
 }
 {code}
  
 Now that the easy stuff is completed let connect both the database and the POJO together using iBatis.
  
 {code:title=Report.xml|borderStyle=solid}
 <typeAlias alias="Report" type="reporting.viewer.domain.Report"/>
  
 <resultMap class="Report" id="ReportResult">
  <result column="id" property="id" />
  <result column="name" property="name" />
  <result column="description" property="description" />
  <result column="data" property="data" jdbcType="BLOB"/>
 </resultMap>
  
 <select id="getReportById" parameterClass="string" resultMap="ReportResult">
  SELECT
  *
  FROM
  REPORT
  WHERE
  id = #value#
 </select>
  
 <insert id="insertReport" parameterClass="Report">
  INSERT INTO
  REPORT (
  id,
  name,
  description,
  data
  )
  values (
  #id#,
  #name#,
  #description#,
  #data#
  )
 </insert>
  
 <update id="updateReport" parameterClass="Report">
  UPDATE REPORT set
  name = #name#,
  description = #description#,
  data = #data#
  WHERE
  id = #id#
 </update>
 {code}
  
  
 As you can see there is nothing special that you need to do.
  
  
 When working with a CLOB the only that the you need to change is the property in your bean. Just change byte[] to java.lang.String.
  
 {tip:title=Data size bigger than max size for this type: ???? }
 Some of the older jdbc drivers for Oracle have trouble with Strings that are larger then 4k. The first step to correct this issue it to get a jdbc driver from Oracle that is newer then 10g Release 2. This driver will work with both 9i and 10g databases. If you are stuck with an older driver you can try to set a driver property. The property is SetBigStringTryClob=true. If you are using the SimpleDataSource with iBatis use the follow line in the config file.
 \\
 \\
 <property name="Driver.SetBigStringTryClob" value="true"/>
 {tip}
  
 {tip:title=Data size always 86 bytes? }
 If you find that the length of your byte[] is always 86, check that you have the jdbcType="BLOB" or jdbcType="CLOB" in your result map.
 {tip}
Site running on a free Atlassian Confluence Open Source Project License granted to OSS. Evaluate Confluence today.
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.5.5 Build:#811 Jul 25, 2007) - Bug/feature request - Contact Administrators