You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "B.J. Reed" <bj...@gmail.com> on 2009/02/12 19:29:05 UTC

question about the useSetBytesForBlobs field

Hi, I've been looking at the DBDictionary class at a setBytes() issue 
and I have a question about the useSetBytesForBlobs field.  Seems that 
some Dictionaries set this to true and some leave it as the default of 
false.  The only thing this field does is determine if 
DBDictionary.setBytes() should use preparedStmt.setBytes() or use a 
ByteArrayInputStream to setBytes() regardless of whether the field is a 
small byte[] or a blob. 

The question is this...does anyone remember the history of this field? 
or why openJPA does setBytes() differently for different DB's?

Thanks,
--B.J. Reed

Re: question about the useSetBytesForBlobs field

Posted by "B.J. Reed" <bj...@gmail.com>.
With DB2, if we have a field that's defined as CHAR(16) FOR BIT DATA NOT 
NULL   (not a blob), then OpenJPA gets an exception trying to use the 
setBinaryStream() with a ByteArrayInputStream passed into it.

DB2 SQL Error: SQLCODE=-301, SQLSTATE=07006, SQLERRMC=1, DRIVER=3.50.152 
   {prepstmnt 1386959531 INSERT INTO NULLID.TESTTBL (tkiid) VALUES (?) 
   [params=(InputStream) java.io.ByteArrayInputStream@75947594]} 
   [code=-301, state=07006]SQLCA OUTPUT[Errp=SQLRI1DA, Errd=-2145779603, 
0, 
   0, 0, -80, 0]


Michael Dick wrote:
> Hi B.J.
>
> I'd think that the default should be to use setBytes() unless there's a
> known issue with a specific JDBC driver or database vendor that requires a
> different method call.
>
> Is there a specific problem with calling setBinaryStream (the alternative to
> setBytes) with DB2?
>
> Regards,
> -mike
>
> On Thu, Feb 12, 2009 at 12:29 PM, B.J. Reed <bj...@gmail.com> wrote:
>
>   
>> Hi, I've been looking at the DBDictionary class at a setBytes() issue and I
>> have a question about the useSetBytesForBlobs field.  Seems that some
>> Dictionaries set this to true and some leave it as the default of false.
>>  The only thing this field does is determine if DBDictionary.setBytes()
>> should use preparedStmt.setBytes() or use a ByteArrayInputStream to
>> setBytes() regardless of whether the field is a small byte[] or a blob.
>> The question is this...does anyone remember the history of this field? or
>> why openJPA does setBytes() differently for different DB's?
>>
>> Thanks,
>> --B.J. Reed
>>
>>     
>
>   


Re: question about the useSetBytesForBlobs field

Posted by Michael Dick <mi...@gmail.com>.
Hi B.J.

I'd think that the default should be to use setBytes() unless there's a
known issue with a specific JDBC driver or database vendor that requires a
different method call.

Is there a specific problem with calling setBinaryStream (the alternative to
setBytes) with DB2?

Regards,
-mike

On Thu, Feb 12, 2009 at 12:29 PM, B.J. Reed <bj...@gmail.com> wrote:

> Hi, I've been looking at the DBDictionary class at a setBytes() issue and I
> have a question about the useSetBytesForBlobs field.  Seems that some
> Dictionaries set this to true and some leave it as the default of false.
>  The only thing this field does is determine if DBDictionary.setBytes()
> should use preparedStmt.setBytes() or use a ByteArrayInputStream to
> setBytes() regardless of whether the field is a small byte[] or a blob.
> The question is this...does anyone remember the history of this field? or
> why openJPA does setBytes() differently for different DB's?
>
> Thanks,
> --B.J. Reed
>