Обсуждение: LargeObject API
Hello, Is there any way to use the proprietary LargeObject API, without actually having a reference to the postgresql Drivers's Connection object? I need to store (potentially) large chunks of data, so as I read the documentation I need to use the oid type for performance reasons. However, if the application is executing within a j2ee server with connection pooling, the given Connection instance is just a proxy for the actual one. Otherwise I could possibly use PreparedStatement.setBlob(), but how could I create a Blob instance? I'm not on the mailing list (yet). -dennis --------------------------------------------------------------------------- The information in this email is confidential and may be legally protected.
Hi, You have to chose between database portability and better performance. Personally I am using a BYTEA field and setBytes : this allows me to have portable code across databases and decent performance. Regards. Dennis Thrysøe a écrit : > Hello, > > Is there any way to use the proprietary LargeObject API, without > actually having a reference to the postgresql Drivers's Connection object? > > I need to store (potentially) large chunks of data, so as I read the > documentation I need to use the oid type for performance reasons. > > However, if the application is executing within a j2ee server with > connection pooling, the given Connection instance is just a proxy for > the actual one. > > Otherwise I could possibly use PreparedStatement.setBlob(), but how > could I create a Blob instance? > > I'm not on the mailing list (yet). > > -dennis > --------------------------------------------------------------------------- > The information in this email is confidential and may be legally protected. > > > ---------------------------(end of broadcast)--------------------------- > TIP 5: don't forget to increase your free space map settings >
On Thu, 2 Aug 2007, Dennis Thrysøe wrote:
> Is there any way to use the proprietary LargeObject API, without actually
> having a reference to the postgresql Drivers's Connection object?
Often connection wrappers provide a means to access the underlying
Connection. You don't say what you're using so you'll have to consult
those docs yourself.
> Otherwise I could possibly use PreparedStatement.setBlob(), but how could I
> create a Blob instance?
>
JDBC4 provides a means for creating Blobs, but we haven't implemented that
yet, so the easiest way is to create a Blob is to get it from the
database:
stmt.execute("CREATE TABLE t (a int, b oid)");
stmt.execute("INSERT INTO t VALUES (1, lo_creat(-1))");
ResultSet rs = stmt.executeQuery("SELECT b FROM t WHERE a = 1");
rs.next();
Blob b = rs.getBlob(1);
Kris Jurka
Kris Jurka wrote:
> On Thu, 2 Aug 2007, Dennis Thrysøe wrote:
>
>> Is there any way to use the proprietary LargeObject API, without
>> actually having a reference to the postgresql Drivers's Connection
>> object?
>
> Often connection wrappers provide a means to access the underlying
> Connection. You don't say what you're using so you'll have to consult
> those docs yourself.
My goal is to support any j2ee server, so I cannot assume much about any
proxy/pooling mechanism.
> stmt.execute("CREATE TABLE t (a int, b oid)");
> stmt.execute("INSERT INTO t VALUES (1, lo_creat(-1))");
> ResultSet rs = stmt.executeQuery("SELECT b FROM t WHERE a = 1");
> rs.next();
> Blob b = rs.getBlob(1);
Thanks. That looks like a good solution.
-dennis
---------------------------------------------------------------------------
The information in this email is confidential and may be legally protected.