数据库读取错误:ran out of memory retrieving query results

之前使用jdbc连数据库,获取的都是一些小数据,偶尔的将各类文件存到数据库中,读取得时候会报错:ran out of memory retrieving query results。原因是:数据库连接机制ResultSet rs = st.executeQuery(sql)中,由于定义每次读取多少行返回给ResultSet 是自动定义的,当单条数据很大时,如果初始定义的条数不合适(可能分配固定的存储空间),那么一次读入多条数据就会引起数据丢失。所以只需要自行定义每次读入的条数,就能解决问题。

因为我读入的数据是pdf文件的二进制流,单条数据很大,所以定义每次返回给ResultSet 一条数据,保证有足够的空间存储。

需要用到的设置代码,Connection的setAutoCommit(),Statement的setFetchSize();

设置代码如下:

Class.forName( "org.postgresql.Driver" ).newInstance();
String url = "jdbc:postgresql://localhost:5432/pdfDB" ;
Connection con = DriverManager.getConnection(url, "postgres" , "postgres" );
con.setAutoCommit(false);
Statement st = con.createStatement();
st.setFetchSize(1);
String sql = " select pdf from proposal";
ResultSet rs = st.executeQuery(sql);
if(rs!=null) System.out.println("connect sql succeed!");
while (rs.next())
{
    is = rs.getBinaryStream(1);
    if(is!=null) {
        ........
     }
}
rs.close();
st.close();
con.close();


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值