cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andreas Pardeike <andr...@pardeike.net>
Subject Re: Inserting with a BLOB column fails
Date Mon, 22 May 2006 09:23:57 GMT
I just double checked. My cayenne.xml contains:

    <node name="mysql"
       datasource="mysql.driver.xml"
       adapter="org.objectstyle.cayenne.dba.mysql.MySQLAdapter"
       factory="org.objectstyle.cayenne.conf.DriverDataSourceFactory">
       <map-ref name="mysql"/>
    </node>

Versions:

Cayenne Release Notes 1.2 B3 (beta)
mysql  Ver 14.7 Distrib 4.1.14, for redhat-linux-gnu (i386) using  
readline 4.3

I did some more work, but couldn't get any further,
Andreas

On 19 maj 2006, at 18.46, Andrus Adamchik wrote:

> A corresponding Cayenne unit test works on all version of MySQL  
> between 4.0 and 5.0 (tested column type as 'longblob', but I don't  
> think it matters). So what version do you have?
>
> Another thing to check - are you actually using MySQLAdapter (or  
> 1.2 auto adapter)? Is it possible there is an adapter mixup.
>
> Andrus
>
> On May 19, 2006, at 11:58 AM, Andreas Pardeike wrote:
>
>> Hi,
>>
>> When I try to insert a new row into my image database using this
>> code:
>>
>>     File imgFile = new File(TEMPFILE2);
>>     InputStream imgStream = new FileInputStream(imgFile);
>>     long imgStreamLength = imgFile.length();
>>     byte[] imgData = new byte[(int)imgStreamLength];
>>     int offset = 0;
>>     int numRead = 0;
>>     while(offset < imgData.length && (numRead=imgStream.read 
>> (imgData, offset, imgData.length-offset)) >= 0)
>>        offset += numRead;
>>     imgStream.close();
>>
>>     Images img = (Images)context.createAndRegisterNewObject 
>> (Images.class);
>>     img.setName("jei");
>>     img.setGroup("medarbetare");
>>     img.setType("image/jpeg");
>>     img.setX(new Integer(160));
>>     img.setY(new Integer(120));
>>     img.setImage(imgData);
>>     context.commitChanges();
>>
>> Cayenne fails with this error:
>>
>>     QueryLogger: INSERT INTO images (group, image, name, type, x,  
>> y) VALUES (?, ?, ?, ?, ?, ?)
>>     QueryLogger: [bind: 'medarbetare', < 89 50 4E 47 0D 0A 1A 0A  
>> 00 00 00 0D ...>, 'jei', 'image/jpeg', 160, 120]
>>     QueryLogger: *** error.
>>     java.sql.SQLException: Syntax error or access violation  
>> message from server: "You have an error in your SQL syntax;
>>     check the manual that corresponds to your MySQL server version  
>> for the right syntax to use near 'group, image, name,
>>     type, x, y) VALUES ('medarbetare', _binary'‰PNG\r\n\Z\n\0\0\'  
>> at line 1"
>>
>> Images is defined as:
>>
>>     CREATE TABLE `images` (
>>         `name` varchar(64) NOT NULL default '',
>>         `group` varchar(64) NOT NULL default '',
>>         `type` varchar(64) NOT NULL default '',
>>         `image` blob NOT NULL,
>>         `x` int(11) NOT NULL default '0',
>>         `y` int(11) NOT NULL default '0',
>>         PRIMARY KEY  (`name`,`group`)
>>     ) ENGINE=MyISAM DEFAULT CHARSET=latin1
>>
>> and the relevant part in Images is:
>>
>>     public void setImage(byte[] image) {
>>         writeProperty("image", image);
>>     }
>>     public byte[] getImage() {
>>         return (byte[])readProperty("image");
>>     }
>>
>>
>> Any pointers or ideas? I already tried changing the column type  
>> but it
>> doesn't change anything.
>>
>> Andreas Pardeike


Mime
View raw message