Thread: problem with storing BLOBs larger then 2MB
Hello, I have this problem. I need to store some files into my DB and there is (I mean) a problem with last (from jdbc.postgresql.org)stable jdbc driver (stable driver for pgsql 7.2, java2). When I try to store file larger than 2MB (2132 220), exception java.lang.OutOfMemoryError <<no stack trace available>> Exception in thread "main" occured on line "executeUpdate()". Thanks for help Michal Josifek Client computer: JDBC driver: last stable from jdbc.postgresql.org OS: w2k JDK: Sun 1.3.1_01 Server computer: DB: stable 7.2 OS: Linux RH 7.2 Table SQL: CREATE TABLE "files" ( "id" int4 DEFAULT nextval('"files_id_seq"'::text) NOT NULL, "name" varchar(250), "size" int4, "file" bytea, "note" varchar(50), CONSTRAINT "files_pkey" PRIMARY KEY ("id") ) WITHOUT OIDS; Sample code: /* * db_test.java * */ package tests; /** * * @author Michal * @version */ import java.util.*; import java.util.zip.*; import java.sql.*; import java.io.*; public class db_test { private Connection conn; /** Creates new db_test */ public db_test() { } public void writeFile(String strFileName,String strNote) throws java.lang.Exception { File fil = new File(strFileName); FileInputStream fis = new FileInputStream(fil); System.out.println(fil.length()); PreparedStatement ps; ps = this.conn.prepareStatement("insert into files (name,size,file,note) values(?, ?, ?, ?)"); ps.setString(1,fil.getName()); ps.setInt(2,(int)fil.length()); ps.setBinaryStream(3,fis,(int)fil.length()); ps.setString(4,strNote); ps.executeUpdate(); // EXCEPTION LINE !!!!! ps.close(); fis.close(); this.conn.commit(); } /** * @param args the command line arguments */ public static void main (String args[]) throws java.lang.Exception { Class.forName("org.postgresql.Driver"); db_test dbts = new db_test(); dbts.conn = DriverManager.getConnection("jdbc:postgresql://192.168.30.190:5432/postgres","user","pass"); dbts.conn.setAutoCommit(false); dbts.writeFile("d:/java/openssl.tar.gz","Note"); dbts.conn.close(); } }
Might be a JVM error. There are usually flags to control how much stack and heap is avail to the JVM. I have set these on Sun JVM before to higher than default values. At 02:19 PM 2/13/2002 +0100, Michal Josifek wrote: >Hello, >I have this problem. I need to store some files into my DB and there is (I >mean) a problem with last (from jdbc.postgresql.org) stable jdbc driver >(stable driver for pgsql 7.2, java2). When I try to store file larger than >2MB (2 132 220), exception > >java.lang.OutOfMemoryError > <<no stack trace available>> >Exception in thread "main" > >occured on line "executeUpdate()". > > >Thanks for help > >Michal Josifek > > > > >Client computer: >JDBC driver: last stable from jdbc.postgresql.org >OS: w2k >JDK: Sun 1.3.1_01 > >Server computer: >DB: stable 7.2 >OS: Linux RH 7.2 > > > > > >Table SQL: > >CREATE TABLE "files" ( >"id" int4 DEFAULT nextval('"files_id_seq"'::text) NOT NULL, >"name" varchar(250), >"size" int4, >"file" bytea, >"note" varchar(50), >CONSTRAINT "files_pkey" PRIMARY KEY ("id") >) WITHOUT OIDS; > > > > > > >Sample code: > >/* > * db_test.java > * > */ > >package tests; > >/** > * > * @author Michal > * @version > */ > >import java.util.*; >import java.util.zip.*; >import java.sql.*; >import java.io.*; > >public class db_test { > private Connection conn; > > /** Creates new db_test */ > public db_test() { > } > > > public void writeFile(String strFileName,String strNote) throws > java.lang.Exception { > > File fil = new File(strFileName); > FileInputStream fis = new FileInputStream(fil); > System.out.println(fil.length()); > PreparedStatement ps; > > ps = this.conn.prepareStatement("insert into files > (name,size,file,note) values(?, ?, ?, ?)"); > ps.setString(1,fil.getName()); > ps.setInt(2,(int)fil.length()); > ps.setBinaryStream(3,fis,(int)fil.length()); > ps.setString(4,strNote); > > ps.executeUpdate(); // EXCEPTION LINE !!!!! > ps.close(); > fis.close(); > this.conn.commit(); > } > > /** > * @param args the command line arguments > */ > public static void main (String args[]) throws java.lang.Exception { > Class.forName("org.postgresql.Driver"); > > db_test dbts = new db_test(); > > dbts.conn = > DriverManager.getConnection("jdbc:postgresql://192.168.30.190:5432/postgres","user","pass"); > dbts.conn.setAutoCommit(false); > > dbts.writeFile("d:/java/openssl.tar.gz","Note"); > > dbts.conn.close(); > > > } > >} > > > >---------------------------(end of broadcast)--------------------------- >TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
Try increasing the memory available to the jvm. the switch is -Xmx<memorysize> as in: "java -Xmx56m myClass". This is a non-standard option, but I've never encountered a jvm that it didin't work for. -Nick -------------------------------------------------------------------------- Nick Fankhauser nickf@ontko.com Phone 1.765.935.4283 Fax 1.765.962.9788 Ray Ontko & Co. Software Consulting Services http://www.ontko.com/ > -----Original Message----- > From: pgsql-jdbc-owner@postgresql.org > [mailto:pgsql-jdbc-owner@postgresql.org]On Behalf Of Michal Josifek > Sent: Wednesday, February 13, 2002 8:19 AM > To: pgsql-jdbc@postgresql.org > Subject: [JDBC] problem with storing BLOBs larger then 2MB > > > Hello, > I have this problem. I need to store some files into my DB and > there is (I mean) a problem with last (from jdbc.postgresql.org) > stable jdbc driver (stable driver for pgsql 7.2, java2). When I > try to store file larger than 2MB (2 132 220), exception > > java.lang.OutOfMemoryError > <<no stack trace available>> > Exception in thread "main" > > occured on line "executeUpdate()". > > > Thanks for help > > Michal Josifek > > > > > Client computer: > JDBC driver: last stable from jdbc.postgresql.org > OS: w2k > JDK: Sun 1.3.1_01 > > Server computer: > DB: stable 7.2 > OS: Linux RH 7.2 > > > > > > Table SQL: > > CREATE TABLE "files" ( > "id" int4 DEFAULT nextval('"files_id_seq"'::text) NOT NULL, > "name" varchar(250), > "size" int4, > "file" bytea, > "note" varchar(50), > CONSTRAINT "files_pkey" PRIMARY KEY ("id") > ) WITHOUT OIDS; > > > > > > > Sample code: > > /* > * db_test.java > * > */ > > package tests; > > /** > * > * @author Michal > * @version > */ > > import java.util.*; > import java.util.zip.*; > import java.sql.*; > import java.io.*; > > public class db_test { > private Connection conn; > > /** Creates new db_test */ > public db_test() { > } > > > public void writeFile(String strFileName,String strNote) throws > java.lang.Exception { > > File fil = new File(strFileName); > FileInputStream fis = new FileInputStream(fil); > System.out.println(fil.length()); > PreparedStatement ps; > > ps = this.conn.prepareStatement("insert into files > (name,size,file,note) values(?, ?, ?, ?)"); > ps.setString(1,fil.getName()); > ps.setInt(2,(int)fil.length()); > ps.setBinaryStream(3,fis,(int)fil.length()); > ps.setString(4,strNote); > > ps.executeUpdate(); // EXCEPTION LINE !!!!! > ps.close(); > fis.close(); > this.conn.commit(); > } > > /** > * @param args the command line arguments > */ > public static void main (String args[]) throws java.lang.Exception { > Class.forName("org.postgresql.Driver"); > > db_test dbts = new db_test(); > > dbts.conn = > DriverManager.getConnection("jdbc:postgresql://192.168.30.190:5432 > /postgres","user","pass"); > dbts.conn.setAutoCommit(false); > > dbts.writeFile("d:/java/openssl.tar.gz","Note"); > > dbts.conn.close(); > > > } > > } > > > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) >