We have Informix 7.3 here and for various reasons we will be stuck
with it for a while. I need to write some graphical objects into a
database table and I was just assessing the feasibility but failed at
the first hurdle . I created the simplest of tables, like this
one below:
create table tt_pics (
id char(10),
pic byte in blobspace
)
I then tried two ways of putting things into this table:
Method 1: using the LOAD command
The manual was very terse about loading stuff into a table with a byte
column. So I just took a shoot in the dark and hoped things would go
right.
I created a text file with the following content,
somebody|aabbccddee|
That 2nd column's value was just some bytes' values in 2-char hex
number form.
I then tried loading this text file into the table with an SQL command
like this:
load from 'the-text-file.txt' insert into tt_pics
Needless to say, I got an error message:
-------------------------------------------
603: Cannot close blob.
847: Error in load file line 1.
Error in line 18
Near character position 22
--------------------------------------------
So, no go there. Let's talk about method 2.
Method 2:
I wrote a java program like this below:
------------------------------------------- snip
--------------------------------------------------------------------
import java.io.*;
import java.sql.*;
public class WriteBlob {
static public void main( String args[] ) {
String url = "jdbc:informix-sqli://localhost:8899/somedb:" +
"INFORMIXSERVER=ifxsvr;user=whoever;password=dontcare";
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String strsql;
File picFile = new File("somepic.jpg");
java.io.BufferedInputStream bin = null;
int i;
try {
Class.forName( "com.informix.jdbc.IfxDriver" );
con = DriverManager.getConnection( url );
strsql = "insert into tt_pics values(?,?)";
pstmt = con.prepareStatement( strsql );
FileInputStream fis = new FileInputStream( picFile );
pstmt.setString( 1, "somebody" );
pstmt.setBinaryStream( 2, (InputStream) fis, 10 );
i = pstmt.executeUpdate();
System.out.println("i=" + i);
} catch (ClassNotFoundException ce) {
System.out.println( "Class Not Found!!" );
} catch (SQLException se) {
System.out.println( "SQL exception: " + se.getMessage() );
se.printStackTrace();
} catch (Exception ie) {
System.out.println( "I/O Exception " + ie.getMessage() );
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (con != null)
con.close();
} catch (Exception ep) {
System.out.println( ep.getMessage() );
}
}
}
}
------------------------------------------------ snip
-----------------------------------------------------------
When I ran it, I got the following error message:
SQL exception: Cannot close blob.
java.sql.SQLException: Cannot close blob.
at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:
373)
at com.informix.jdbc.IfxSqli.a(IfxSqli.java:3207)
at com.informix.jdbc.IfxSqli.E(IfxSqli.java:3517)
at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2352)
at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2268)
at com.informix.jdbc.IfxSqli.executeCommand(IfxSqli.java:775)
at com.informix.jdbc.IfxResultSet.b(IfxResultSet.java:291)
at com.informix.jdbc.IfxStatement.c(IfxStatement.java:1233)
at
com.informix.jdbc.IfxPreparedStatement.executeUpdate(IfxPreparedState
ment.java:408)
at WriteBlob.main(WriteBlob.java:21)
There, I am now stuck. Can anybody give me a hand?
On 5月16æ—¥, 下åˆ1時54分, Jonathan Leffler wrote:
> On 5/14/10 12:45 AM, emrefan wrote:
>
>
>
>
>
> > We have Informix 7.3 here and for various reasons we will be stuck
> > with it for a while. I need to write some graphical objects into a
> > database table and I was just assessing the feasibility but failed at
> > the first hurdle. Â I created the simplest of tables, like this
> > one below:
>
> > create table tt_pics (
> >    id     char(10),
> >    pic    byte in blobspace
> > )
>
> > I then tried two ways of putting things into this table:
>
> > Method 1: using the LOAD command
>
> > The manual was very terse about loading stuff into a table with a byte
> > column. So I just took a shoot in the dark and hoped things would go
> > right.
>
> > I created a text file with the following content,
>
> > somebody|aabbccddee|
>
> > That 2nd column's value was just some bytes' values in 2-char hex
> > number form.
>
> > I then tried loading this text file into the table with an SQL command
> > like this:
>
> > load from 'the-text-file.txt' insert into tt_pics
>
> > Needless to say, I got an error message:
>
> > -------------------------------------------
> > Â Â 603: Cannot close blob.
>
> > Â Â 847: Error in load file line 1.
> > Error in line 18
> > Near character position 22
> > --------------------------------------------
>
> That's a weird error. Â The load file you showed should have worked fine.
> I was doing some blob work last week - using SQLCMD rather than
> DB-Access - but I'm 99.5% sure it would have worked OK in DB-Access too.
> Â The one difference was I was using BYTE {IN TABLE}; can you try that
> temporarily? Â That will help isolate the issue.
I think the fact I was using "in bolbspace" caused the error. After I
ran "onmode -l; onmode -c" as suggested by some nice guy here, all was
fine. And I just tried it out, with "in table", there was no such
error.
> You said Informix 7.3; did you mean 7.30.UC1 or 7.31.UD9? Â There's about
> a decade between the releases. Â You've left it a bit late if you are
> using a 7.30 or 7.31.UCx version to upgrade, but...
We have Informix 7.30 UC6.
On 5/14/10 12:45 AM, emrefan wrote:
> We have Informix 7.3 here and for various reasons we will be stuck
> with it for a while. I need to write some graphical objects into a
> database table and I was just assessing the feasibility but failed at
> the first hurdle. I created the simplest of tables, like this
> one below:
>
> create table tt_pics (
> id char(10),
> pic byte in blobspace
> )
>
> I then tried two ways of putting things into this table:
>
> Method 1: using the LOAD command
>
> The manual was very terse about loading stuff into a table with a byte
> column. So I just took a shoot in the dark and hoped things would go
> right.
>
> I created a text file with the following content,
>
> somebody|aabbccddee|
>
> That 2nd column's value was just some bytes' values in 2-char hex
> number form.
>
> I then tried loading this text file into the table with an SQL command
> like this:
>
> load from 'the-text-file.txt' insert into tt_pics
>
> Needless to say, I got an error message:
>
> -------------------------------------------
> 603: Cannot close blob.
>
> 847: Error in load file line 1.
> Error in line 18
> Near character position 22
> --------------------------------------------
That's a weird error. The load file you showed should have worked fine.
I was doing some blob work last week - using SQLCMD rather than
DB-Access - but I'm 99.5% sure it would have worked OK in DB-Access too.
The one difference was I was using BYTE {IN TABLE}; can you try that
temporarily? That will help isolate the issue.
You said Informix 7.3; did you mean 7.30.UC1 or 7.31.UD9? There's about
a decade between the releases. You've left it a bit late if you are
using a 7.30 or 7.31.UCx version to upgrade, but...
> So, no go there. Let's talk about method 2.
>
> Method 2:
> [...snip...]
> There, I am now stuck. Can anybody give me a hand?
-=JL=-
On 5月14æ—¥, 下åˆ8時43分, Superboer wrote:
> I assume that you freshly added the blobspace.
> In that case you have to do an onmode -l; onmode -c
> otherwise you can not write to the newly added blobspace.
> or the damn thing was full....????
That was magic! That fixed it! I restarted the informix server at
least twice after creating the blobspace, never aware that I still
need to run those onmode commands. Thanks a million.
On 5月14æ—¥, 下åˆ8時22分, Dirk Gunsthövel wrote:
> Hi,
>
> Hi,
>
> I am not sure about your first attempt because I am
> not certain about the encoding that is used when
> unloading / loading blobs in dbaccess.
>
> But I am pretty sure at least your second attempt should
> have worked.
>
> (though the line
> Â Â pstmt.setBinaryStream( 2, (InputStream) fis, 10 );
> in your java code seems weird. Why reading exactly
> 10 bytes from the file? Do something like
> Â Â pstmt.setBinaryStream( 2, (InputStream) fis, (int) fis.lenght() );
> instead.)
>
> I never saw that error coming up and I do the same quite
> often.
>
> From the error message it looks like something is wrong
> with your DB.... maybe the blobspace?
>
> I think it would be easy and worth trying to locate the
> blob in tablespace instead of blobspace for a test.
>
> Regards,
> Dirk
>
> --
> --
> -- Dipl.-Math. Dirk Gunsthövel
> -- -professional services-
> --
> -- Dirk Gunsthövel IT Systemanalyse - GunCon
> -- Hammer Str. 13
> -- D-48153 Muenster
> -- phone: +49 (0) 251 28446- 0
> -- fax: Â +49 (0) 251 28446-55
> -- web: Â http://www.GunCon.de
> -- email: i...@GunCon.de
> -- UStId: DE 189527667
> --
> -- Â Â 'One now understands why some animals eat their young.'
> -- Â Â (Andrew in 'Bicentennial Man' 1999)
>
> "emrefan" schrieb im Newsbeitragnews:f25c7ceb-3b61-4185-a005-5097536252bd@42g2000prb.googlegroups.com...
>
>
>
> > We have Informix 7.3 here and for various reasons we will be stuck
> > with it for a while. I need to write some graphical objects into a
> > database table and I was just assessing the feasibility but failed at
> > the first hurdle . Â I created the simplest of tables, like this
> > one below:
>
> > create table tt_pics (
> >   id     char(10),
> >   pic    byte in blobspace
> > )
>
> > I then tried two ways of putting things into this table:
>
> > Method 1: using the LOAD command
>
> > The manual was very terse about loading stuff into a table with a byte
> > column. So I just took a shoot in the dark and hoped things would go
> > right.
>
> > I created a text file with the following content,
>
> > somebody|aabbccddee|
>
> > That 2nd column's value was just some bytes' values in 2-char hex
> > number form.
>
> > I then tried loading this text file into the table with an SQL command
> > like this:
>
> > load from 'the-text-file.txt' insert into tt_pics
>
> > Needless to say, I got an error message:
>
> > -------------------------------------------
> > Â 603: Cannot close blob.
>
> > Â 847: Error in load file line 1.
> > Error in line 18
> > Near character position 22
> > --------------------------------------------
>
> > So, no go there. Let's talk about method 2.
>
> > Method 2:
>
> > I wrote a java program like this below:
>
> > ------------------------------------------- snip
> > --------------------------------------------------------------------
> > import java.io.*;
> > import java.sql.*;
>
> > public class WriteBlob {
>
> > Â static public void main( String args[] ) {
>
> > Â Â Â String url = "jdbc:informix-sqli://localhost:8899/somedb:" +
>
> > "INFORMIXSERVER=ifxsvr;user=whoever;password=dontcare";
> > Â Â Â Connection con = null;
> > Â Â Â PreparedStatement pstmt = null;
> > Â Â Â ResultSet rs = null;
> > Â Â Â String strsql;
> > Â Â Â File picFile = new File("somepic.jpg");
> > Â Â Â java.io.BufferedInputStream bin = null;
> > Â Â Â int i;
>
> > Â Â Â try {
> > Â Â Â Â Class.forName( "com.informix.jdbc.IfxDriver" );
> > Â Â Â Â con = DriverManager.getConnection( url );
> > Â Â Â Â strsql = "insert into tt_pics values(?,?)";
> > Â Â Â Â pstmt = con.prepareStatement( strsql );
> > Â Â Â Â FileInputStream fis = new FileInputStream( picFile );
>
> > Â Â Â Â pstmt.setString( 1, "somebody" );
> > Â Â Â Â pstmt.setBinaryStream( 2, (InputStream) fis, 10 );
>
> > Â Â Â Â i = pstmt.executeUpdate();
> > Â Â Â Â System.out.println("i=" + i);
>
> > Â Â Â } catch (ClassNotFoundException ce) {
> > Â Â Â Â System.out.println( "Class Not Found!!" );
> >    } catch (SQLException  se) {
> > Â Â Â Â System.out.println( "SQL exception: " + se.getMessage() );
> > Â Â Â Â se.printStackTrace();
> > Â Â Â } catch (Exception ie) {
> > Â Â Â Â System.out.println( "I/O Exception " + ie.getMessage() );
> > Â Â Â } finally {
> > Â Â Â Â try {
> > Â Â Â Â Â Â if (rs != null)
> > Â Â Â Â Â Â Â rs.close();
> > Â Â Â Â Â Â if (pstmt != null)
> > Â Â Â Â Â Â Â pstmt.close();
> > Â Â Â Â Â Â if (con != null)
> > Â Â Â Â Â Â Â con.close();
> > Â Â Â Â } catch (Exception ep) {
> > Â Â Â Â Â System.out.println( ep.getMessage() );
> > Â Â Â Â }
> > Â Â Â }
> > Â }
> > }
> > ------------------------------------------------ snip
> > -----------------------------------------------------------
>
> > When I ran it, I got the following error message:
>
> > SQL exception: Cannot close blob.
> > java.sql.SQLException: Cannot close blob.
> > Â Â Â Â at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:
> > 373)
> > Â Â Â Â at com.informix.jdbc.IfxSqli.a(IfxSqli.java:3207)
> > Â Â Â Â at com.informix.jdbc.IfxSqli.E(IfxSqli.java:3517)
> > Â Â Â Â at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2352)
> > Â Â Â Â at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2268)
> > Â Â Â Â at com.informix.jdbc.IfxSqli.executeCommand(IfxSqli.java:775)
> > Â Â Â Â at com.informix.jdbc.IfxResultSet.b(IfxResultSet.java:291)
> > Â Â Â Â at com.informix.jdbc.IfxStatement.c(IfxStatement.java:1233)
> > Â Â Â Â at
> > com.informix.jdbc.IfxPreparedStatement.executeUpdate(IfxPreparedState
> > ment.java:408)
> > Â Â Â Â at WriteBlob.main(WriteBlob.java:21)
>
> > There, I am now stuck.  Can anybody give me a hand?- éš±è—è¢«å¼•ç”¨æ–‡å— -
>
> - é¡¯ç¤ºè¢«å¼•ç”¨æ–‡å— -
That's third parameter to the setBinaryStream() call was the result of
a "not thinking much cut & paste". I didn't even know what that third
parameter is for until your pointed it out. Thanks. That was not the
root of the problem though. I needed to do a "onmode -l; onmode -c" as
some other nice guy here pointed out to me. That fixed it.
Many thanks for your help and your offer to help further. This is a
really nice community. You know, not many around me are still using
Informix and I feel a bit lonely and helpless, especially when I have
a problem.
On 5月14æ—¥, 下åˆ6時23分, Art Kagel wrote:
> Get Jonathan Leffler's sqlcmd package it contains simple utilities to load
> data into a blob = insblob.ec, updblob.ec, etc.
>
> Art
>
> Art S. Kagel
> Advanced DataTools (www.advancedatatools.com)
> IIUG Board of Directors (a...@iiug.org)
I did look into that alternative (thinking at least I could proceed
with some testing even if I still have to figure out how my final
solution is going to work), but unfortuately we don't have esql/c. I
think a binary version for my Solaris 2.6 (very dated, I know) won't
be easy to find.
But thanks for the idea.
I assume that you freshly added the blobspace.
In that case you have to do an onmode -l; onmode -c
otherwise you can not write to the newly added blobspace.
or the damn thing was full....????
-----------
BTW IBM/Informix support folks V 11 does not show onstat -D for
blobspaces.
nr pages read/written is always zero!!
-----------
for unload format:
if your blobinfo is hex ff fc fd ad db 09
then this is found in the unload file.
so a line could look like:
-----------------------------------start unload
file-------------------
superboer|fffcfdad0907|
-----------------------------------end unload file-------------------
i did a quick look at the java stuff and it looks good.
if the above is not the solution to your issue, drop a new line,
i some working examples if you need them.
Superboer.
BTW for perf reasons if your blobs are bigger then say 120kb on
average i would gofor an blobspace, small
say 2k to 16kb i would put them in the table
create table tt_pics (
id char(10),
pic byte
)
even the new sblobspaces (V9 and higher) can not beat the performance
on update/insert.
Blobspaces will nuke obstacle when the average is 120KB or bigger.
On 14 mei, 14:22, Dirk Gunsthövel wrote:
> Hi,
>
> Hi,
>
> I am not sure about your first attempt because I am
> not certain about the encoding that is used when
> unloading / loading blobs in dbaccess.
>
> But I am pretty sure at least your second attempt should
> have worked.
>
> (though the line
> pstmt.setBinaryStream( 2, (InputStream) fis, 10 );
> in your java code seems weird. Why reading exactly
> 10 bytes from the file? Do something like
> pstmt.setBinaryStream( 2, (InputStream) fis, (int) fis.lenght() );
> instead.)
>
> I never saw that error coming up and I do the same quite
> often.
>
> From the error message it looks like something is wrong
> with your DB.... maybe the blobspace?
>
> I think it would be easy and worth trying to locate the
> blob in tablespace instead of blobspace for a test.
>
> Regards,
> Dirk
>
> --
> --
> -- Dipl.-Math. Dirk Gunsthövel
> -- -professional services-
> --
> -- Dirk Gunsthövel IT Systemanalyse - GunCon
> -- Hammer Str. 13
> -- D-48153 Muenster
> -- phone: +49 (0) 251 28446- 0
> -- fax: +49 (0) 251 28446-55
> -- web: http://www.GunCon.de
> -- email: i...@GunCon.de
> -- UStId: DE 189527667
> --
> -- 'One now understands why some animals eat their young.'
> -- (Andrew in 'Bicentennial Man' 1999)
>
> "emrefan" schrieb im Newsbeitragnews:f25c7ceb-3b61-4185-a005-5097536252bd@42g2000prb.googlegroups.com...
>
> > We have Informix 7.3 here and for various reasons we will be stuck
> > with it for a while. I need to write some graphical objects into a
> > database table and I was just assessing the feasibility but failed at
> > the first hurdle . I created the simplest of tables, like this
> > one below:
>
> > create table tt_pics (
> > id char(10),
> > pic byte in blobspace
> > )
>
> > I then tried two ways of putting things into this table:
>
> > Method 1: using the LOAD command
>
> > The manual was very terse about loading stuff into a table with a byte
> > column. So I just took a shoot in the dark and hoped things would go
> > right.
>
> > I created a text file with the following content,
>
> > somebody|aabbccddee|
>
> > That 2nd column's value was just some bytes' values in 2-char hex
> > number form.
>
> > I then tried loading this text file into the table with an SQL command
> > like this:
>
> > load from 'the-text-file.txt' insert into tt_pics
>
> > Needless to say, I got an error message:
>
> > -------------------------------------------
> > 603: Cannot close blob.
>
> > 847: Error in load file line 1.
> > Error in line 18
> > Near character position 22
> > --------------------------------------------
>
> > So, no go there. Let's talk about method 2.
>
> > Method 2:
>
> > I wrote a java program like this below:
>
> > ------------------------------------------- snip
> > --------------------------------------------------------------------
> > import java.io.*;
> > import java.sql.*;
>
> > public class WriteBlob {
>
> > static public void main( String args[] ) {
>
> > String url = "jdbc:informix-sqli://localhost:8899/somedb:" +
>
> > "INFORMIXSERVER=ifxsvr;user=whoever;password=dontcare";
> > Connection con = null;
> > PreparedStatement pstmt = null;
> > ResultSet rs = null;
> > String strsql;
> > File picFile = new File("somepic.jpg");
> > java.io.BufferedInputStream bin = null;
> > int i;
>
> > try {
> > Class.forName( "com.informix.jdbc.IfxDriver" );
> > con = DriverManager.getConnection( url );
> > strsql = "insert into tt_pics values(?,?)";
> > pstmt = con.prepareStatement( strsql );
> > FileInputStream fis = new FileInputStream( picFile );
>
> > pstmt.setString( 1, "somebody" );
> > pstmt.setBinaryStream( 2, (InputStream) fis, 10 );
>
> > i = pstmt.executeUpdate();
> > System.out.println("i=" + i);
>
> > } catch (ClassNotFoundException ce) {
> > System.out.println( "Class Not Found!!" );
> > } catch (SQLException se) {
> > System.out.println( "SQL exception: " + se.getMessage() );
> > se.printStackTrace();
> > } catch (Exception ie) {
> > System.out.println( "I/O Exception " + ie.getMessage() );
> > } finally {
> > try {
> > if (rs != null)
> > rs.close();
> > if (pstmt != null)
> > pstmt.close();
> > if (con != null)
> > con.close();
> > } catch (Exception ep) {
> > System.out.println( ep.getMessage() );
> > }
> > }
> > }
> > }
> > ------------------------------------------------ snip
> > -----------------------------------------------------------
>
> > When I ran it, I got the following error message:
>
> > SQL exception: Cannot close blob.
> > java.sql.SQLException: Cannot close blob.
> > at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg..java:
> > 373)
> > at com.informix.jdbc.IfxSqli.a(IfxSqli.java:3207)
> > at com.informix.jdbc.IfxSqli.E(IfxSqli.java:3517)
> > at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2352)
> > at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2268)
> > at com.informix.jdbc.IfxSqli.executeCommand(IfxSqli.java:775)
> > at com.informix.jdbc.IfxResultSet.b(IfxResultSet.java:291)
> > at com.informix.jdbc.IfxStatement.c(IfxStatement.java:1233)
> > at
> > com.informix.jdbc.IfxPreparedStatement.executeUpdate(IfxPreparedState
> > ment.java:408)
> > at WriteBlob.main(WriteBlob.java:21)
>
> > There, I am now stuck. Can anybody give me a hand?
Hi,
Hi,
I am not sure about your first attempt because I am
not certain about the encoding that is used when
unloading / loading blobs in dbaccess.
But I am pretty sure at least your second attempt should
have worked.
(though the line
pstmt.setBinaryStream( 2, (InputStream) fis, 10 );
in your java code seems weird. Why reading exactly
10 bytes from the file? Do something like
pstmt.setBinaryStream( 2, (InputStream) fis, (int) fis.lenght() );
instead.)
I never saw that error coming up and I do the same quite
often.
From the error message it looks like something is wrong
with your DB.... maybe the blobspace?
I think it would be easy and worth trying to locate the
blob in tablespace instead of blobspace for a test.
Regards,
Dirk
--
--
-- Dipl.-Math. Dirk Gunsthövel
-- -professional services-
--
-- Dirk Gunsthövel IT Systemanalyse - GunCon
-- Hammer Str. 13
-- D-48153 Muenster
-- phone: +49 (0) 251 28446- 0
-- fax: +49 (0) 251 28446-55
-- web: http://www.GunCon.de
-- email: info@GunCon.de
-- UStId: DE 189527667
--
-- 'One now understands why some animals eat their young.'
-- (Andrew in 'Bicentennial Man' 1999)
"emrefan" schrieb im Newsbeitrag news:f25c7ceb-3b61-4185-a005-5097536252bd@42g2000prb.googlegroups.com...
> We have Informix 7.3 here and for various reasons we will be stuck
> with it for a while. I need to write some graphical objects into a
> database table and I was just assessing the feasibility but failed at
> the first hurdle . I created the simplest of tables, like this
> one below:
>
> create table tt_pics (
> id char(10),
> pic byte in blobspace
> )
>
> I then tried two ways of putting things into this table:
>
> Method 1: using the LOAD command
>
> The manual was very terse about loading stuff into a table with a byte
> column. So I just took a shoot in the dark and hoped things would go
> right.
>
> I created a text file with the following content,
>
> somebody|aabbccddee|
>
> That 2nd column's value was just some bytes' values in 2-char hex
> number form.
>
> I then tried loading this text file into the table with an SQL command
> like this:
>
> load from 'the-text-file.txt' insert into tt_pics
>
> Needless to say, I got an error message:
>
> -------------------------------------------
> 603: Cannot close blob.
>
> 847: Error in load file line 1.
> Error in line 18
> Near character position 22
> --------------------------------------------
>
> So, no go there. Let's talk about method 2.
>
> Method 2:
>
> I wrote a java program like this below:
>
> ------------------------------------------- snip
> --------------------------------------------------------------------
> import java.io.*;
> import java.sql.*;
>
> public class WriteBlob {
>
> static public void main( String args[] ) {
>
> String url = "jdbc:informix-sqli://localhost:8899/somedb:" +
>
> "INFORMIXSERVER=ifxsvr;user=whoever;password=dontcare";
> Connection con = null;
> PreparedStatement pstmt = null;
> ResultSet rs = null;
> String strsql;
> File picFile = new File("somepic.jpg");
> java.io.BufferedInputStream bin = null;
> int i;
>
> try {
> Class.forName( "com.informix.jdbc.IfxDriver" );
> con = DriverManager.getConnection( url );
> strsql = "insert into tt_pics values(?,?)";
> pstmt = con.prepareStatement( strsql );
> FileInputStream fis = new FileInputStream( picFile );
>
> pstmt.setString( 1, "somebody" );
> pstmt.setBinaryStream( 2, (InputStream) fis, 10 );
>
> i = pstmt.executeUpdate();
> System.out.println("i=" + i);
>
> } catch (ClassNotFoundException ce) {
> System.out.println( "Class Not Found!!" );
> } catch (SQLException se) {
> System.out.println( "SQL exception: " + se.getMessage() );
> se.printStackTrace();
> } catch (Exception ie) {
> System.out.println( "I/O Exception " + ie.getMessage() );
> } finally {
> try {
> if (rs != null)
> rs.close();
> if (pstmt != null)
> pstmt.close();
> if (con != null)
> con.close();
> } catch (Exception ep) {
> System.out.println( ep.getMessage() );
> }
> }
> }
> }
> ------------------------------------------------ snip
> -----------------------------------------------------------
>
> When I ran it, I got the following error message:
>
> SQL exception: Cannot close blob.
> java.sql.SQLException: Cannot close blob.
> at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:
> 373)
> at com.informix.jdbc.IfxSqli.a(IfxSqli.java:3207)
> at com.informix.jdbc.IfxSqli.E(IfxSqli.java:3517)
> at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2352)
> at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2268)
> at com.informix.jdbc.IfxSqli.executeCommand(IfxSqli.java:775)
> at com.informix.jdbc.IfxResultSet.b(IfxResultSet.java:291)
> at com.informix.jdbc.IfxStatement.c(IfxStatement.java:1233)
> at
> com.informix.jdbc.IfxPreparedStatement.executeUpdate(IfxPreparedState
> ment.java:408)
> at WriteBlob.main(WriteBlob.java:21)
>
> There, I am now stuck. Can anybody give me a hand?