Re: JDBC + PostgreSQL + LargeObjects - Mailing list pgsql-jdbc

From Doug Fields
Subject Re: JDBC + PostgreSQL + LargeObjects
Date
Msg-id 5.1.0.14.2.20020218134851.031be4f8@mail.pexicom.com
Whole thread Raw
In response to Re: JDBC + PostgreSQL + LargeObjects  (Paulo Delgado <pdelgado@pasaportevip.com>)
List pgsql-jdbc
Your problem is very simple.

You cannot allow ANYTHING other than the image to go out via the JSP.

In your example given, You have a whole lot of whitespace going out.

I suggest you put, guarding each newline, <%-- at the end of the line and
--%> at the beginning of
the next - or just merge the tags, e.g.:

<%@ page import="java.io.*" %><%@
page import="java.sql.*" %><%@
page import="org.postgresql.largeobject.*" %><%
// rest of code...
%><%-- DO NOT END WITH A NEWLINE!!! --%>

Note that you can also combine multiple import statements into one with
code such as:

import="java.io.*,java.sql.*,org.postgresql.largeobject.*".

Cheers,

Doug



At 01:27 PM 2/18/2002, you wrote:
>Oh, i don't get an error message, instead, i see on the browser, the icon
>for a "not an image".
>I tried to wget it, and the newly downloaded file does not match the size
>of the original image, and i cannot open it with an image viewer.
>I used the same SQL sentence using the console (the terminal), and using
>lo_export, and the exported image is correctly exported.
>
>On Mon, 18 Feb 2002 09:44:43 -0800
>Barry Lind <barry@xythos.com> wrote:
>
> > Paulo,
> >
> > If you could mention what error you are getting and what version of the
> > code you are using that would be helpful.
> >
> > --Barry
> >
> >
> > Paulo Delgado wrote:
> > > I'm writing a JSP which instead of generating HTML code, it sends an
> > > image to the browser. The image is retrieved from the database, where it
> > > is stored as a BLOB (an OID). I read the docs online, this is the URL:
> > >
> > > http://developer.postgresql.org/docs/postgres/jdbc-binary-data.html
> > >
> > > And this is the code (still not working)
> > >
> > >
> > >   <%@ page import="java.io.*" %>
> > >   <%@ page import="java.sql.*" %>
> > >   <%@ page import="org.postgresql.largeobject.*" %>
> > >
> > >   <%
> > >   response.setContentType("image/jpeg");
> > >   out.close();
> > >   ServletOutputStream sos = response.getOutputStream();
> > >   try
> > >   {
> > >     Class.forName("org.postgresql.Driver");
> > >   }
> > >   catch(ClassNotFoundException cnfex)
> > >   {
> > >     cnfex.printStackTrace();
> > >   }
> > >   try
> > >   {
> > >     Connection mycon;
> > >     mycon=
> > > DriverManager.getConnection("jdbc:postgresql://localhost:5432/database",
> > > "userid" , "password");
> > >     mycon.setAutoCommit(false);
> > >
> > >     // Get the Large Object Manager to perform operations with
> > >     LargeObjectManager lobj =
> > > ((org.postgresql.Connection)mycon).getLargeObjectAPI();
> > >
> > >    PreparedStatement ps = mycon.prepareStatement("SELECT pic FROM
> > > mytable WHERE month='"+request.getParameter("m")+"' AND
> > > year="+request.getParameter("y"));
> > >     ResultSet rs = ps.executeQuery();
> > >     if (rs != null) {
> > >       while(rs.next()) {
> > >         //open the large object for reading
> > >         int oid = rs.getInt(1);
> > >         LargeObject obj = lobj.open(oid , LargeObjectManager.READ);
> > >
> > >         //read the data
> > >         byte buf[] = new byte[obj.size()];
> > >         obj.read(buf, 0, obj.size());
> > >
> > >         //do something with the data read here
> > >         response.setContentLength(obj.size());
> > >         int i=0;
> > >         for(i=0; i<obj.size() ; i++)
> > >         {
> > >           sos.write(buf[i]);
> > >         }
> > >         // Close the object
> > >         obj.close();
> > >       }
> > >       rs.close();
> > >     }
> > >     ps.close();
> > >     mycon.close();
> > >
> > >
> > >     }
> > >     catch(SQLException sqex)
> > >     {
> > >     out.println(sqex.toString());
> > >     }
> > >     %>
> > >
> > >
> > > the table is created like this:
> > >
> > > CREATE TABLE mytable(
> > >  pic  oid,
> > >  month  int2  NOT NULL,
> > >  year  int2  NOT NULL,
> > >  PRIMARY KEY (month, year)
> > > );
> > >
> > > I've searched all over the docs, asked all over IRC, and still does not
> > > work. any ideas?
> > >
> > >
> > >
> > > ---------------------------(end of broadcast)---------------------------
> > > TIP 4: Don't 'kill -9' the postmaster
> > >
> > >
> >
> >
> >
>
>---------------------------(end of broadcast)---------------------------
>TIP 6: Have you searched our list archives?
>
>http://archives.postgresql.org



pgsql-jdbc by date:

Previous
From: Alex Kurian
Date:
Subject: Regd. JDBC driver
Next
From: "Dave Cramer"
Date:
Subject: Re: getIndexInfo() throws NullPointerException