往数据库中插入流数据的问题

      今天项目中有一个“印章管理”的功能,一直运行的没什么问题,今天突然在插入印章的时候出现了错误,后来跟了一下代码,发现当底层数据库为Postgresql时,我们将一个印章(也就是一个jpg的图片)写入数据库时,出现了错误。原来的插入代码如下:

       

1.  PreparedStatement ps = conn.prepareStatement("INSERT INTO images VALUES (?, ?)");
2.  ps.setString(1, file.getName());
3.  ps.setBinaryStream(2, fis);

问题出现在第三行,原来在Postgresql的JDBC驱动没有实现setBinaryStream(int parameterIndex, java.io.InputStream x)这个方法,而实现了

void setBinaryStream(int parameterIndex, java.io.InputStream x, int length) throws SQLException方法,所以我们不能用ps.setBinaryStream(2, fis);而必须选择后一种方法,并将输入流的长度作为第三个参数传进去。

  最后,真心说一句:Postgresql真坑爹啊

原文地址:https://www.cnblogs.com/chenfei0801/p/2994542.html