Hi,
I encountered this problem too and the solution was to override the
getResultValue method in the driver like this:
... driver = new DBDatabaseDriverPostgreSQL(){
@Override
public Object getResultValue(ResultSet rset, int
columnIndex, DataType dataType) throws SQLException {
if (dataType == DataType.BLOB){
InputStream is =
rset.getBinaryStream(columnIndex);
if (is == null){
return new byte[]{};
}
try{
return ByteStreams.toByteArray(is);
//Google Guava utility method
}catch (Exception e) {
LOG.log(Level.SEVERE, "",e); //JDK logging
return new byte[]{};
}
finally{
if (is != null)
try {
is.close();
} catch (Exception e) {}
}
} else{
return super.getResultValue(rset, columnIndex,
dataType);
}
}
};
It works fine, but it is usable only for relatively small blobs that fit in
memory. I think that for really large blobs it is not feasible to use the
DBReader.getValue method anyway, in such case the resultset streaming API
should be used directly.
Regards,
Vladimir
On 19. 6. 2012, at 10:48, Francis De Brabandere wrote:
> I can try to reproduce this on my machine but a simple (unit) test
> that reproduces this would be welcome.
>
> Cheers,
> Francis
>
> On 19 June 2012 10:34, Rainer Döbele <[email protected]> wrote:
>> Hi Frias,
>>
>>
>>
>> unfortunately I am not able to verify your bug as I have no PostgreSQL
>> database available.
>>
>>
>>
>> From your description I assume that you have declared your Column
>> ADDRESSBOOK.INFORMATION as DataType.BLOB.
>>
>> As far as I can see from the PostgreSQL Driver, the BLOB data type is mapped
>> to the PostgreSQL Type "bytea".
>>
>> I don't know what the difference between the PostgreSQL Type "long" and
>> "bytea" is, but this might be the cause of the problem.
>>
>>
>>
>> If possible could you please set a breakpoint on the function
>> getResultValue(...) in class
>> org.apache.empire.db.postgresql.DBDatabaseDriverPostgreSQL.
>>
>> I assume that the method getBlob(columnIndex) on the JDBC ResultSet fails.
>>
>> We then need to find out, which other method must be used to retrieve the
>> value of type long.
>>
>>
>>
>> Regards
>>
>> Rainer
>>
>>
>>
>>
>>
>> from: Frias Inchausti, Jon [mailto:[email protected]]
>> to: [email protected]
>> re: empire db possible bug: blob data type is not working under queries
>> execution commands
>>
>>
>>
>> Hi all,
>>
>>
>>
>> My name is Jon Frias and I am working under the version 2.3.1-SNAPSHOT of
>> empire db and posgresql driver. (I have already created a bug issue, you can
>> find it at: https://issues.apache.org/jira/browse/EMPIREDB-147 )
>>
>>
>>
>> The possible bug I have detected is the following:
>>
>> When I execute a query on a data table which contains a blob data type, it
>> returns this error message:
>>
>>
>>
>> 140 [main] INFO org.apache.empire.exceptions.EmpireException - An Error
>> occured. Message is: The database operation failed. Native error is: Bad
>> value for type long : \x01000100
>>
>>
>>
>>
>>
>> For example: I have a data table with 3 data fields (Integer, String and
>> BLOB).
>>
>> The database is created correctly with different data types.
>>
>>
>>
>> The code I use to execute a query command is the following:
>>
>>
>>
>> /**
>> * Gets the address books.
>> *
>> * @return the address books
>> */
>> public List<addressBookBean> getAddressBooks(){
>> List<addressBookBean> myABs = new ArrayList<addressBookBean>();
>>
>> DBCommand cmd = db.createCommand();
>> cmd.select(db.ADDRESSBOOK.ADDRESS_BOOK_ID, db.ADDRESSBOOK.LOCATION,
>> db.ADDRESSBOOK.INFORMATION);
>>
>> DBReader reader = new DBReader();
>> reader.open(cmd, conn);
>> while(reader.moveNext()){
>> myABs.add(new addressBookBean(
>> reader.getInt(db.ADDRESSBOOK.ADDRESS_BOOK_ID),
>> reader.getString(db.ADDRESSBOOK.LOCATION),
>> (byte[]) reader.getValue(db.ADDRESSBOOK.INFORMATION)));
>> }
>>
>> return myABs;
>> }
>>
>>
>>
>>
>>
>> Thanks a lot for your time and if any further information is required, don't
>> hesitate and let me know.
>>
>> Best Regards,
>>
>> Jon
>>
>> PS: I opened an issue about a bug with the BLOB data type when the sql
>> script is generated for creating the database. the error message was very
>> similar and it was totally fixed. Maybe it can help. The issue is the
>> following:
>> https://issues.apache.org/jira/browse/EMPIREDB-146?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13288425#comment-13288425
>>
>>
>>
>> Jon Frias Inchausti
>>
>> Investigador
>>
>> Researcher
>>
>>
>>
>> UNIDAD DE SISTEMAS INDUSTRIALES /
>>
>> INDUSTRIAL SYSTEMS UNIT
>>
>>
>>
>> División Industria y Transporte /
>>
>> Industry and Transport Division
>>
>>
>>
>> TECNALIA
>>
>> Paseo Mikeletegi 7 - Parque Tecnológico
>>
>> E-20009 Donostia - San Sebastián (Gipuzkoa, Spain)
>>
>> Telf Industry & Transport Division: (+34) 943 105115 or 902 760 002
>>
>> Telf Tecnalia Research & Innovation: (+34) 946 430 850 or 902 760 000
>>
>> Fax: (+34) 946 460 900 or 901 706 009
>>
>> [email protected]
>>
>> www.tecnalia.com
>>
>>
>>
>> cid:[email protected] <http://www.facebook.com/Tecnalia>
>> cid:[email protected] <http://twitter.com/tecnalia>
>> cid:[email protected]
>> <http://www.flickr.com/photos/tecnalia/sets/>
>> cid:[email protected]
>> <http://www.linkedin.com/company/tecnalia-research-&-innovation>
>> cid:[email protected] <http://www.slideshare.net/tecnalia>
>> cid:[email protected] <http://www.youtube.com/user/tecnaliaTV>
>> cid:[email protected] <http://www.tecnalia.com/rss.php?lang=es>
>>
>> cid:[email protected] <http://www.tecnalia.com/>
>>
>> Este mensaje puede contener información confidencial o privilegiada. Si no
>> eres el destinatario de este mensaje, notifícaselo por favor al remitente y
>> bórralo sin reenviarlo o guardarlo dado que está legalmente prohibido.
>>
>> Mezu honek daukan informazioa isilpekoa edo pribilegiatua izan daiteke. Zuri
>> zuzendua ez badago emaiozu, mesedez, horren berri igorleari eta ezaba ezazu
>> bidali edo gorde gabe, legalki debekatua dago eta.
>>
>> This message may contain confidential, proprietary or legally privileged
>> information. If you are not the intended recipient of this message, please
>> notify it to the sender and delete without resending or backing it, as it is
>> legally prohibited.
>>
>> cid:[email protected] favor, piensa en el medio ambiente
>> antes de imprimir este e-mail.
>>
>> Mesedez pentsatu ingurugiroan e-mail hau imprimatu baino lehen.
>>
>> Please, consider the environment before printing this e-mail.
>>
>>
>>