Re: Inserting with a BLOB column fails

From: Andreas Pardeike (andrea..ardeike.net)
Date: Mon May 22 2006 - 05:23:57 EDT

  • Next message: Jeff de Vries: "Re: Parent/Child Insert ordering (was: Caching problem?)"

    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



    This archive was generated by hypermail 2.0.0 : Mon May 22 2006 - 05:24:30 EDT