Обсуждение: LargeObject API

Поиск
Список
Период
Сортировка

LargeObject API

От
Dennis Thrysøe
Дата:
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.


Re: LargeObject API

От
"Xavier Poinsard"
Дата:
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
>


Re: LargeObject API

От
Kris Jurka
Дата:

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

Re: LargeObject API

От
Dennis Thrysøe
Дата:
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.