经过测试:JAVA存取PostgreSQL的bytea类型均存在内存的限制问题(存取的数据过大会出现out of memory内存溢出的问题),EnterpriseDB对此做了优化。
取PostgreSQL中的bytea,并存储到硬盘上.
/**
* @author Liu Yuanyuan
*/
private void getBytea
{
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try
{
String driver = "org.postgresql.Driver";
String url = "jdbc:postgresql://" + "127.0.0.1" + ":" + "5866" + "/" + "db1";
Class.forName(driver);
System.out.println("find class");
conn = DriverManager.getConnection(url, "lyy", "lyy"); System.out.println("connected");
stmt = conn.createStatement();
String sql = "select obj from lyy.rawtable2 where id = 1";
rs = stmt.executeQuery(sql);
System.out.println("sql=" + sql);
while (rs.next())
{
System.out.println(rs.getMetaData().getColumnTypeName(1));
OutputStream ops = null;
InputStream ips = null;
File file = new File("e:" + File.separator + “binary”);
try
{
ips = rs.getBinaryStream(1);
byte[] buffer = new byte[ips.available()];//or other value like 1024
ops = new FileOutputStream(file);
for (int i; (i = ips.read(buffer)) > 0;)
{
ops.write(buffer, 0, i)