RE: Orion with PostgreSQL (oid)

2001-03-16 Thread Julian Richardson

Hi Armin,

A bit of further digging (sorry to other listers, last couple of emails on
this were sent to Armin only) into the source for the Postgres JDBC drivers
for version 7.0 reveals the following little snippet:

public void setBinaryStream(int parameterIndex, InputStream x, int
length) throws SQLException
{
throw new PSQLException("postgresql.prep.is");
}

- I guess somebody hasn't gotten around to implemening it yet :-(   (that
"postgresql.prep.is" error translates to the "InputStream as parameter not
supported" error you mentioned)

If you really need this to work with postgres I suppose that leaves a few
options:

1) wrap the Postgres drivers and use the Large Objects API behind the scenes
2) fix the Postgres 7.0 drivers! (I think it's open-source right, and
anybody can dive in and sort stuff out?)
3) Use BMP in Orion and use the (non-portable) Postgres Large Objects API
there
4) downgrade to Postgres 6.5 where I assume this worked (there are people on
the list using Postgres via JDBC, right?)
5) Wait for this to be fixed (I assume it's fairly high on the Postgres bug
list)

option 6 is to give up and use another database (which I personally don't
like the sound of having used up a day or so getting postgres installed and
configured! Depends how long it'll take to work around the problems though)


cheers

Jules


 --
 From: Armin Michel[SMTP:[EMAIL PROTECTED]]
 Sent: 16 March 2001 09:49
 To:   Orion-Interest
 Subject:  Orion with PostgreSQL (oid)
 
 I got some problems with PostgreSQL and Orion when using blobs (oids in 
 the table).
 
 
 I checked:
 http://www.postgresql.org/users-lounge/docs/7.0/programmer/jdbc6519.htm
 
 In the above page you can read the following example:
 
 snip
 
  To insert an image, you would use:
 
  File file = new File("myimage.gif");
  FileInputStream fis = new FileInputStream(file);
  PreparedStatement ps = conn.prepareStatement("insert into images values
  (?,?)");
  ps.setString(1,file.getName());
  ps.setBinaryStream(2,fis,file.length());
  ps.executeUpdate();
  ps.close();
  fis.close();"
 
  /snip
 
  This does a PreparedStatement.setBinaryStream(int,InputStream,int); -
  Exactly what Orion did!
 
  Here is the interesting part of the Exception.printStackTrace(); :
 
  snip
 
   Nested exception is:
   InputStream as parameter not supported
   at java.lang.Throwable.(Throwable.java:84)
   at java.lang.Exception.(Exception.java:35)
   at java.sql.SQLException.(SQLException.java:100)
   at
   org.postgresql.util.PSQLException.(PSQLException.java:22)
   at
  
 org.postgresql.jdbc2.PreparedStatement.setBinaryStream(PreparedStatement
   .java:417)
   at com.evermind.sql.ao.setBinaryStream(JAX)
 
  /snip
 
  So, this would lead to the conclusion, that Orion just tries to use a
  standard JDBC-API. Maybe Orion uses a special subclass of InputStream 
 and
  the JDBC-Driver doesn't correctly account for this situation. In the 
 JDBC
  API it reads:
 
  snip
  Note: This stream object can either be a standard Java stream object or
  your own subclass that implements the standard interface.
  /snip
 
  This would blame the JDBC-driver then?
 
  Yours
 
  Armin
 




RE: Orion with PostgreSQL (oid)

2001-03-16 Thread Mike Cannon-Brookes

I suggest you email the postgresql-jdbc list and ask someone to implement
it. The list is very active and people are usually quite responsive.

-mike

 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED]]On Behalf Of Julian
 Richardson
 Sent: Saturday, March 17, 2001 3:56 AM
 To: Orion-Interest
 Cc: '[EMAIL PROTECTED]'
 Subject: RE: Orion with PostgreSQL (oid)


 Hi Armin,

 A bit of further digging (sorry to other listers, last couple of emails on
 this were sent to Armin only) into the source for the Postgres
 JDBC drivers
 for version 7.0 reveals the following little snippet:

   public void setBinaryStream(int parameterIndex, InputStream x, int
 length) throws SQLException
   {
   throw new PSQLException("postgresql.prep.is");
   }

 - I guess somebody hasn't gotten around to implemening it yet :-(   (that
 "postgresql.prep.is" error translates to the "InputStream as parameter not
 supported" error you mentioned)

 If you really need this to work with postgres I suppose that leaves a few
 options:

 1) wrap the Postgres drivers and use the Large Objects API behind
 the scenes
 2) fix the Postgres 7.0 drivers! (I think it's open-source right, and
 anybody can dive in and sort stuff out?)
 3) Use BMP in Orion and use the (non-portable) Postgres Large Objects API
 there
 4) downgrade to Postgres 6.5 where I assume this worked (there
 are people on
 the list using Postgres via JDBC, right?)
 5) Wait for this to be fixed (I assume it's fairly high on the
 Postgres bug
 list)

 option 6 is to give up and use another database (which I personally don't
 like the sound of having used up a day or so getting postgres
 installed and
 configured! Depends how long it'll take to work around the
 problems though)


 cheers

 Jules


  --
  From:   Armin Michel[SMTP:[EMAIL PROTECTED]]
  Sent:   16 March 2001 09:49
  To: Orion-Interest
  Subject:Orion with PostgreSQL (oid)
 
  I got some problems with PostgreSQL and Orion when using blobs (oids in
  the table).
 
 
  I checked:
  http://www.postgresql.org/users-lounge/docs/7.0/programmer/jdbc6519.htm
 
  In the above page you can read the following example:
 
  snip
 
   To insert an image, you would use:
 
   File file = new File("myimage.gif");
   FileInputStream fis = new FileInputStream(file);
   PreparedStatement ps = conn.prepareStatement("insert into images values
   (?,?)");
   ps.setString(1,file.getName());
   ps.setBinaryStream(2,fis,file.length());
   ps.executeUpdate();
   ps.close();
   fis.close();"
 
   /snip
 
   This does a PreparedStatement.setBinaryStream(int,InputStream,int); -
   Exactly what Orion did!
 
   Here is the interesting part of the Exception.printStackTrace(); :
 
   snip
 
Nested exception is:
InputStream as parameter not supported
at java.lang.Throwable.(Throwable.java:84)
at java.lang.Exception.(Exception.java:35)
at java.sql.SQLException.(SQLException.java:100)
at
org.postgresql.util.PSQLException.(PSQLException.java:22)
at
   
  org.postgresql.jdbc2.PreparedStatement.setBinaryStream(PreparedStatement
.java:417)
at com.evermind.sql.ao.setBinaryStream(JAX)
 
   /snip
 
   So, this would lead to the conclusion, that Orion just tries to use a
   standard JDBC-API. Maybe Orion uses a special subclass of InputStream
  and
   the JDBC-Driver doesn't correctly account for this situation. In the
  JDBC
   API it reads:
 
   snip
   Note: This stream object can either be a standard Java stream object or
   your own subclass that implements the standard interface.
   /snip
 
   This would blame the JDBC-driver then?
 
   Yours
 
   Armin