JAVA存取PostgreSQL二进制类型bytea

JAVA在存取PostgreSQL的bytea类型时遇到内存限制问题,可能导致out of memory异常。文章介绍了如何通过调整JDBC驱动版本、使用setBinaryStream方法并转换参数类型来避免内存溢出,以及处理与PostgreSQL交互时可能出现的错误。同时,提供了相关的参考资料和错误解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过测试: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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值