You may have to put it into a bean or Map. I'd try that.
Larry On 9/22/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
I didn't even think of doing this. I'm so accustomed to providing a resultMap that I didn't even think to try a resultClass. I plugged it in but now when I start I see the following exception: Cause: com.ibatis.sqlmap.client.SqlMapException: Error. Could not set result class. Cause: java.lang.ClassNotFoundException: byte[] ________________________________ From: "Jeff Butler" <[EMAIL PROTECTED]> [mailto:"Jeff Butler" <[EMAIL PROTECTED]>] Sent: Friday, September 22, 2006 12:16 PM To: [email protected] Subject: Re: Result mapping Did you try setting resultClass="byte[]"? I think it might work (no resultMap in this case). It will work the same as if you set resultClass to some other simple type (like Integer) - I think iBATIS is smart enough to know that these types don't really have properties. So I'm thinking this: <select id="loadDoc" parameterClass="DocumentStore" resultClass="byte[]"> readtext op_document_store.document #textPointer# 0 #dataLength# </select> Then do this: byte[] doc = (byte[]) queryForObject(...); It would be worth a try... Jeff Butler On 9/22/06, [EMAIL PROTECTED] <[EMAIL PROTECTED] > wrote: > > > iBatis 2.2.0 (just compiled from source) > Sybase ASE 12.5 > > I'm storing an XML document into a db table. I've defined the column as an IMAGE datatype. Sybase stores these large amounts of data on pages, external to the table. > From the Sybase documentation: > > Instead of storing potentially large text and image data in the table, Adaptive Server stores it in a special structure. A text pointer (textptr) which points to the page where the data is actually stored is assigned. > > Retrieving the data is a two step process. You must first get the pointer and the length of the data and then you can retrieve the data. So I'm first performing a select to retrieve the row of data less the IMAGE column. Then in my resultMap, on the IMAGE column, I define a select attribute to perform the load of the data. Everything appears to work correctly. I can step through the code and see everything getting fired correctly and the data being returned in a byte[]. My problem here is the way I have defined my resultMap for the retrieval of the IMAGE data. At first I thought that I would define the resultClass as my object that expected to receive the data, but that is not correct. (I get a ClassCastException because the returned object is not of the expected type to be assigned.) I need to define the resultClass as a byte[] for everything to succeed correctly, but if I define my resultClass as a byte[], then what is the property of the byte[] that will be assigned the result? I can't leave the property attribute off of the Result element as that makes the XML invalid, so how do I get around this? > > Thanks for the help. > > Below is my SQL Map: > > <code> > <typeAlias alias="DocumentStore" type="com.sybase.cosmos.domain.DocumentStore"/> > > <resultMap class="DocumentStore" id="DocumentStoreResult"> > <result column="id" jdbcType="NUMERIC" property="id"/> > <result column="order_no" jdbcType="VARCHAR" property="orderNo"/> > <result column="order_code" jdbcType="VARCHAR" property="orderCode"/> > <result column="create_date" jdbcType="TIMESTAMP" property="createDate" /> > <result column="mod_date" jdbcType="TIMESTAMP" property="modifiedDate" /> > <result column="version" jdbcType="INTEGER" property="version" /> > <result column="{textPointer=text_pointer,dataLength=data_length}" property="bytes" select="DocumentStore.loadDoc"/> > </resultMap> > > <resultMap class="byte[]" id="DocumentStoreDocResult"> > <result column="document" jdbcType="LONGVARCHAR" property="bytes"/> > </resultMap> > > <select id="findByPrimaryKey" resultMap="DocumentStoreResult"> > select > docStore.id > , docStore.order_no > , docStore.order_code > , docStore.create_date > , docStore.mod_date > , docStore.version > , textptr(document) as text_pointer > , datalength(document) as data_length > from > document_store docStore > where > docStore.id = #id:NUMERIC# > </select> > > <!-- > Retrieves the document based upon the text pointer and the length of the data > The record must first be retrieved to aquire these values. > --> > <select id="loadDoc" parameterClass="DocumentStore" resultMap="DocumentStoreDocResult"> > readtext op_document_store.document #textPointer# 0 #dataLength# > </select> > </code> > > > > Chris Mathrusse > [EMAIL PROTECTED] > (925) 236-5553 >
