数据库读取错误: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();


你可能感兴趣的:(Spring,Java)