Обсуждение: 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.